[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[address@hidden: Re: Type-in programs using BASH]
From: |
Richard Stallman |
Subject: |
[address@hidden: Re: Type-in programs using BASH] |
Date: |
Sun, 25 Jan 2015 22:43:14 -0500 |
I don't understand what this is about, but I hope you will.
Would you please ack receipt of the message? Then I presume you will DTRT.
------- Start of forwarded message -------
X-Spam-Status: No, score=2.6 required=5.0 tests=BAYES_50,
FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,FROM_LOCAL_NOVOWEL,HK_RANDOM_ENVFROM,
HK_RANDOM_FROM,HTML_MESSAGE,T_DKIM_INVALID autolearn=disabled
version=3.3.2
From: Ryan Cunningham <rvskmbrly3@gmail.com>
Content-Type: multipart/alternative;
boundary="Apple-Mail=_0FFE68EB-40A8-4B26-B362-C6D78F1EEECE"
Message-Id: <D02A5B69-19FB-4DB4-9363-B58CD997E584@gmail.com>
Subject: Re: Type-in programs using BASH
Date: Sun, 25 Jan 2015 09:38:42 -0800
To: rms@gnu.org
In-Reply-To: <918F1A86-E374-4412-94E0-F236649C639B@gmail.com>
- --Apple-Mail=_0FFE68EB-40A8-4B26-B362-C6D78F1EEECE
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=utf-8
Another minor correction. This should be my last correction before your =
team=E2=80=99s discussion on what corrections it makes.
> On Jan 25, 2015, at 9:32 AM, Ryan Cunningham <rvskmbrly3@gmail.com> =
wrote:
>=20
> I have some minor corrections: This addendum (as it is now labeled) =
now also requires publishers to supply both a URL at which users can =
download and a mailing address or phone number through which users can =
request programs designed to assist users in typing type-in programs =
published in object code form, as opposed to only requiring publishers =
to supply either such a URL or such a mailing address or phone number.
>=20
> <type-in-addendum.txt>
>=20
>=20
>> On Jan 24, 2015, at 9:12 PM, Ryan Cunningham <rvskmbrly3@gmail.com =
<mailto:rvskmbrly3@gmail.com>> wrote:
>>=20
>> I correct the hyphenation of =E2=80=9Cbrick-and-mortar=E2=80=9D in =
the definition of a =E2=80=9Ctype-in program=E2=80=9D.
>>=20
>> <type-in-exception.txt>
>>=20
>>> On Jan 24, 2015, at 9:10 PM, Ryan Cunningham <rvskmbrly3@gmail.com =
<mailto:rvskmbrly3@gmail.com>> wrote:
>>>=20
>>> Yet another unnecessary word is removed in the same definition.
>>>=20
>>> <type-in-exception.txt>
>>>=20
>>>> On Jan 24, 2015, at 9:06 PM, Ryan Cunningham <rvskmbrly3@gmail.com =
<mailto:rvskmbrly3@gmail.com>> wrote:
>>>>=20
>>>> I attach a new draft of the Type-In Program Exception, which merely =
fixes a grammar error by removing an unnecessary word in the definition =
of an =E2=80=9Caggregate=E2=80=9D.
>>>>=20
>>>> <type-in-exception.txt>
>>>>=20
>>>>> On Jan 24, 2015, at 8:56 PM, Ryan Cunningham <rvskmbrly3@gmail.com =
<mailto:rvskmbrly3@gmail.com>> wrote:
>>>>>=20
>>>>> Dear Mr. Stallman,
>>>>>=20
>>>>> I am Ryan Cunningham, a high school sophomore and computer =
enthusiast with autism spectrum disorder (ASD). I am simply enthused by =
the idea of free and open-source software.
>>>>>=20
>>>>> I would like to tell you that, while writing a draft Type-In =
Program Exception to the GNU GPL, I=E2=80=99ve made an interesting =
discovery: Sending a here-document to BASH (of course from a shell that =
supports here-documents) can actually enable BASH to execute the same =
kind of type-in program you=E2=80=99d see in the =E2=80=9980s! (Only =
it=E2=80=99s in BASH=E2=80=99s language, not BASIC; by the way, this is =
not a bug.)
>>>>>=20
>>>>> A transcript of an example shell session proving the same is =
attached below.
>>>>>=20
>>>>> $ bash <<'EOF'
>>>>> > date
>>>>> > help
>>>>> > EOF
>>>>> Sat Jan 24 20:35:21 PST 2015
>>>>> GNU bash, version 4.3.30(2)-release (x86_64-apple-darwin14.0.0)
>>>>> These shell commands are defined internally. Type `help' to see =
this list.
>>>>> Type `help name' to find out more about the function `name'.
>>>>> Use `info bash' to find out more about the shell in general.
>>>>> Use `man -k' or `info' to find out more about commands not in this =
list.
>>>>>=20
>>>>> A star (*) next to a name means that the command is disabled.
>>>>>=20
>>>>> job_spec [&] history [-c] [-d offset] =
[n] or hist>
>>>>> (( expression )) if COMMANDS; then =
COMMANDS; [ elif C>
>>>>> . filename [arguments] jobs [-lnprs] [jobspec =
...] or jobs >
>>>>> : kill [-s sigspec | -n =
signum | -sigs>
>>>>> [ arg... ] let arg [arg ...]
>>>>> [[ expression ]] local [option] =
name[=3Dvalue] ...
>>>>> alias [-p] [name[=3Dvalue] ... ] logout [n]
>>>>> bg [job_spec ...] mapfile [-n count] [-O =
origin] [-s c>
>>>>> bind [-lpsvPSVX] [-m keymap] [-f file> popd [-n] [+N | -N]
>>>>> break [n] printf [-v var] format =
[arguments]
>>>>> builtin [shell-builtin [arg ...]] pushd [-n] [+N | -N | =
dir]
>>>>> caller [expr] pwd [-LP]
>>>>> case WORD in [PATTERN [| PATTERN]...)> read [-ers] [-a array] =
[-d delim] [->
>>>>> cd [-L|[-P [-e]] [-@]] [dir] readarray [-n count] [-O =
origin] [-s>
>>>>> command [-pVv] command [arg ...] readonly [-aAf] =
[name[=3Dvalue] ...] o>
>>>>> compgen [-abcdefgjksuv] [-o option] > return [n]
>>>>> complete [-abcdefgjksuv] [-pr] [-DE] > select NAME [in WORDS ... =
;] do COMM>
>>>>> compopt [-o|+o option] [-DE] [name ..> set [-abefhkmnptuvxBCHP] =
[-o option->
>>>>> continue [n] shift [n]
>>>>> coproc [NAME] command [redirections] shopt [-pqsu] [-o] =
[optname ...]
>>>>> declare [-aAfFgilnrtux] [-p] [name[=3Dv> source filename =
[arguments]
>>>>> dirs [-clpv] [+N] [-N] suspend [-f]
>>>>> disown [-h] [-ar] [jobspec ...] test [expr]
>>>>> echo [-neE] [arg ...] time [-p] pipeline
>>>>> enable [-a] [-dnps] [-f filename] [na> times
>>>>> eval [arg ...] trap [-lp] [[arg] =
signal_spec ...]
>>>>> exec [-cl] [-a name] [command [argume> true
>>>>> exit [n] type [-afptP] name [name =
...]
>>>>> export [-fn] [name[=3Dvalue] ...] or ex> typeset [-aAfFgilrtux] =
[-p] name[=3Dva>
>>>>> false ulimit =
[-SHabcdefilmnpqrstuvxT] [lim>
>>>>> fc [-e ename] [-lnr] [first] [last] o> umask [-p] [-S] [mode]
>>>>> fg [job_spec] unalias [-a] name [name =
...]
>>>>> for NAME [in WORDS ... ] ; do COMMAND> unset [-f] [-v] [-n] =
[name ...]
>>>>> for (( exp1; exp2; exp3 )); do COMMAN> until COMMANDS; do =
COMMANDS; done
>>>>> function name { COMMANDS ; } or name > variables - Names and =
meanings of so>
>>>>> getopts optstring name [arg] wait [-n] [id ...]
>>>>> hash [-lr] [-p pathname] [-dt] [name > while COMMANDS; do =
COMMANDS; done
>>>>> help [-dms] [pattern ...] { COMMANDS ; }
>>>>>=20
>>>>> In this model, no command is executed until the here identifier is =
read, and another shell is spawned to execute all commands. Only one =
line at a time can be edited.
>>>>>=20
>>>>> To enable the spread of this quite obscure (as far as I know) way =
to execute BASH, I am attaching the draft exception I mentioned earlier =
in this message. (I hereby transfer copyright over the same to the Free =
Software Foundation.)
>>>>>=20
>>>>> If one wants to save the typed program so it can be executed again =
later, he should use cat <<'EOF' >input.sh | bash instead, where =
=E2=80=9Cinput.sh=E2=80=9D is the name of the output file. (The file =
will be overwritten without warning if it already exists.)
>>>>>=20
>>>>> <type-in-exception.txt>
>>>>>=20
>>>>> I thank you for your efforts, and I encourage you to spread the =
news about this to Linux Format and other GNU/Linux-related magazines, =
and to individual programmers, so they can publish Bourne Again Shell =
programs for execution in this way.
>>>>>=20
>>>>> Sincerely,
>>>>>=20
>>>>> Ryan Cunningham
>>>=20
>>=20
>=20
- --Apple-Mail=_0FFE68EB-40A8-4B26-B362-C6D78F1EEECE
Content-Type: multipart/mixed;
boundary="Apple-Mail=_51A7C042-5A82-40D5-B8FA-5586341517FA"
- --Apple-Mail=_51A7C042-5A82-40D5-B8FA-5586341517FA
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
charset=utf-8
<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
- -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" =
class=3D""><font face=3D"DejaVu Sans" class=3D"">Another minor =
correction. This should be my last correction before your team=E2=80=99s =
discussion on what corrections it makes.</font><div class=3D""><font =
face=3D"DejaVu Sans" class=3D""><br class=3D""></font></div><div =
class=3D""><font face=3D"DejaVu Sans" =
class=3D""></font></div></body></html>=
- --Apple-Mail=_51A7C042-5A82-40D5-B8FA-5586341517FA
Content-Disposition: attachment;
filename=type-in-addendum.txt
Content-Type: text/plain;
name="type-in-addendum.txt"
Content-Transfer-Encoding: quoted-printable
GNU GENERAL PUBLIC LICENSE
TYPE-IN PROGRAM ADDENDUM
Version 1, 24 January 2015
Copyright (C) 2015 The Free Software Foundation, Inc. =
<http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license addendum, but changing it is not allowed.
(Note: Several conveniences have been made in this Addendum
for people without access to the Internet for
downloading supplementary dependency programs.)
0. Definitions.
"This Addendum" means version 1 of the Type-In Program Addendum to the =
GNU General
Public License.
"The License" means version 3 or later of the GNU General Public =
License.
A "Program" is any copyrightable work licensed under the License. =
"You" are one of the
licensees of that Program. The "licensees" and "recipients" may be =
individuals or
organizations.
A "type-in program" is a program distributed by means of printed code =
in binary form or
in a compiled programming language, through the purchase of a hard copy =
of either said
code (standalone) or an aggregate containing the same and other =
programs, at a brick-and-
mortar marketplace, through an e-commerce Web site, or by making a =
request by either
postal mail or a telephone call.
To "propagate" a type-in program means to enable it for such a =
purchase.
An "aggregate" is a compilation of a covered work (as defined in the =
License), with
other separate and independent works, which are not by their nature =
extensions of the
covered work, and which are not combined with it such as to form a =
larger program, in or
on a volume of a storage or distribution medium, provided the =
compilation and its
resulting copyright are not used to limit the access or legal rights of =
the compilation's
users beyond what the individual works permit. As is the case in the =
License, inclusion
of a covered work in an aggregate does not cause this Addendum to apply =
to the other
parts of the aggregate, except for those parts that are themselves =
covered works at the
discretion of the authors thereof. Books and magazine issues containing =
type-in programs
are included in this definition.
"He", "him", and "his", unless otherwise noted, also mean "she" and =
"her".
All other definitions that apply to and in this Addendum are in =
section 0 of the
License.
1. Restrictions on Support, Warranty Protection, and Distribution for =
a Price.
Copies of Programs conveyed under this Addendum may not be coupled in =
any way with
support or warranty protection not provided without charge; nor may the =
Programs
themselves, when conveyed in aggregates, be supplied for any cost other =
than the cost of
distribution of the rest of the aggregate.
2. Restrictions on Conveying Non-Source Forms.
Where the object code is conveyed in the form of a type-in program, =
the object code
must accompany either a program designed for the purpose of assisting a =
user in typing
said code in the form in which it is presented, or a URL at which a user =
can download,
and a mailing address and phone number through which a user can request, =
such a program.
System Libraries or other dependent programs required by a type-in =
program must be
indicated by name in the article accompanying the type-in program, with =
a URL where users
can download, and a mailing address and phone number through which users =
can request, the
source code archives thereof. If a covered type-in program depends on =
another covered
type-in program, such a program's code must be referenced, either by =
cross-reference or
by external reference, in the article accompanying the program that so =
depends.
3. Additional Restrictions.
A person to whom the Program is conveyed, and who distributes a =
modified version of the
Program, may also require the simultaneous publication of further =
derivatives thereof as
type-in programs in addition to propagation through any other means the =
propagators of
his modified version desire to invoke, except if his modified version =
is, in his belief,
too large to be propagated on paper.
4. Additional Method of Ancillary Propagation that Does Not Require =
Acceptance on the
Recipient's End.
Ancillary propagation of a covered work also does not require =
acceptance of the terms
of the License by the recipient of the same work when said work was =
transmitted as a
type-in program.
5. No Patented Components Allowed.
The terms of the License with regard to patents do not apply if the =
Program is a type-
in program; covered type-in programs may not contain or depend on =
patents or patented
components.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your Own Programs
Each program on which this Addendum is invoked shall instead bear the =
following
license notice:
<one line to give the program's name and a brief idea of what it =
does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
The terms of version 1 of the Type-In Program Addendum to the GNU
General Public License also apply to this program.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see =
<http://www.gnu.org/licenses/>, or
write to the Free Software Foundation, Inc., 51 Franklin St., Fl. 5,
Boston, MA 02110-1305, USA.
When a different version of the License is to be used, the License =
version number (here
"3") may be replaced with the number of that version.
Aggregate distributors are also eligible to receive copyright =
disclaimers made under
the unnumbered section of the License given the same title as this =
section of the
Addendum.
Any program licensed under this Addendum can, as an exception to the =
section of the
License given the same title as this section of the Addendum, be =
incorporated into a
proprietary integrated development environment as example source code.
- --Apple-Mail=_51A7C042-5A82-40D5-B8FA-5586341517FA
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
charset=utf-8
<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
- -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" =
class=3D""><div class=3D""><font face=3D"DejaVu Sans" =
class=3D""></font></div><div class=3D""><font face=3D"DejaVu Sans" =
class=3D""><br class=3D""></font><div><blockquote type=3D"cite" =
class=3D""><div class=3D"">On Jan 25, 2015, at 9:32 AM, Ryan Cunningham =
<<a href=3D"mailto:rvskmbrly3@gmail.com" =
class=3D"">rvskmbrly3@gmail.com</a>> wrote:</div><br =
class=3D"Apple-interchange-newline"><div class=3D""><meta =
http-equiv=3D"Content-Type" content=3D"text/html charset=3Dus-ascii" =
class=3D""><div style=3D"word-wrap: break-word; -webkit-nbsp-mode: =
space; -webkit-line-break: after-white-space;" class=3D""><font =
face=3D"DejaVu Sans" class=3D"">I have some minor corrections: This =
addendum (as it is now labeled) now also requires publishers to supply =
both a URL at which users can download <i class=3D"">and</i> a =
mailing address or phone number through which users can request programs =
designed to assist users in typing type-in programs published in object =
code form, as opposed to only requiring publishers to supply either such =
a URL or such a mailing address or phone number.</font><div =
class=3D""><font face=3D"DejaVu Sans" class=3D""><br =
class=3D""></font></div><div class=3D""><font face=3D"DejaVu Sans" =
class=3D""></font></div></div><span =
id=3D"cid:F332982E-1BD6-4374-A355-FD3222C4F0D5@hsd1.wa.comcast.net."><t=
ype-in-addendum.txt></span><meta http-equiv=3D"Content-Type" =
content=3D"text/html charset=3Dutf-8" class=3D""><div style=3D"word-wrap: =
break-word; -webkit-nbsp-mode: space; -webkit-line-break: =
after-white-space;" class=3D""><div class=3D""><font face=3D"DejaVu =
Sans" class=3D""><br class=3D""></font><div class=3D""><font =
face=3D"DejaVu Sans" class=3D""><br class=3D""></font><div =
class=3D""><blockquote type=3D"cite" class=3D""><div class=3D"">On Jan =
24, 2015, at 9:12 PM, Ryan Cunningham <<a =
href=3D"mailto:rvskmbrly3@gmail.com" =
class=3D"">rvskmbrly3@gmail.com</a>> wrote:</div><br =
class=3D"Apple-interchange-newline"><div class=3D""><meta =
http-equiv=3D"Content-Type" content=3D"text/html charset=3Dutf-8" =
class=3D""><div style=3D"word-wrap: break-word; -webkit-nbsp-mode: =
space; -webkit-line-break: after-white-space;" class=3D""><font =
face=3D"DejaVu Sans" class=3D"">I correct the hyphenation of =
=E2=80=9Cbrick-and-mortar=E2=80=9D in the definition of a =E2=80=9Ctype-in=
program=E2=80=9D.</font><div class=3D""><font face=3D"DejaVu Sans" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"DejaVu Sans" class=3D""></font></div></div><span =
id=3D"cid:9ED32848-6881-4EE7-B58A-8510DA65B80D@hsd1.wa.comcast.net." =
class=3D""><type-in-exception.txt></span><meta =
http-equiv=3D"Content-Type" content=3D"text/html charset=3Dutf-8" =
class=3D""><div style=3D"word-wrap: break-word; -webkit-nbsp-mode: =
space; -webkit-line-break: after-white-space;" class=3D""><div =
class=3D""><font face=3D"DejaVu Sans" class=3D""></font></div><div =
class=3D""><font face=3D"DejaVu Sans" class=3D""><br =
class=3D""></font><div class=3D""><blockquote type=3D"cite" =
class=3D""><div class=3D"">On Jan 24, 2015, at 9:10 PM, Ryan Cunningham =
<<a href=3D"mailto:rvskmbrly3@gmail.com" =
class=3D"">rvskmbrly3@gmail.com</a>> wrote:</div><br =
class=3D"Apple-interchange-newline"><div class=3D""><meta =
http-equiv=3D"Content-Type" content=3D"text/html charset=3Dus-ascii" =
class=3D""><div style=3D"word-wrap: break-word; -webkit-nbsp-mode: =
space; -webkit-line-break: after-white-space;" class=3D""><font =
face=3D"DejaVu Sans" class=3D"">Yet another unnecessary word is removed =
in the same definition.</font><div class=3D""><font face=3D"DejaVu Sans" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"DejaVu Sans" class=3D""></font></div></div><span =
id=3D"cid:F1CCEAEA-A506-444F-BCAF-ECD062A3FF45@hsd1.wa.comcast.net." =
class=3D""><type-in-exception.txt></span><meta =
http-equiv=3D"Content-Type" content=3D"text/html charset=3Dutf-8" =
class=3D""><div style=3D"word-wrap: break-word; -webkit-nbsp-mode: =
space; -webkit-line-break: after-white-space;" class=3D""><div =
class=3D""><font face=3D"DejaVu Sans" class=3D""></font></div><div =
class=3D""><font face=3D"DejaVu Sans" class=3D""><br =
class=3D""></font><div class=3D""><div class=3D""><blockquote =
type=3D"cite" class=3D""><div class=3D"">On Jan 24, 2015, at 9:06 PM, =
Ryan Cunningham <<a href=3D"mailto:rvskmbrly3@gmail.com" =
class=3D"">rvskmbrly3@gmail.com</a>> wrote:</div><br =
class=3D"Apple-interchange-newline"><div class=3D""><font face=3D"DejaVu =
Sans" class=3D"" style=3D"font-size: 12px; font-style: normal; =
font-variant: normal; font-weight: normal; letter-spacing: normal; =
line-height: normal; orphans: auto; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; widows: auto; word-spacing: =
0px; -webkit-text-stroke-width: 0px;">I attach a new draft of the =
Type-In Program Exception, which merely fixes a grammar error by =
removing an unnecessary word in the definition of =
an =E2=80=9Caggregate=E2=80=9D.</font><div class=3D"" =
style=3D"font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant: normal; font-weight: normal; letter-spacing: normal; =
line-height: normal; orphans: auto; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; widows: auto; word-spacing: =
0px; -webkit-text-stroke-width: 0px;"><font face=3D"DejaVu Sans" =
class=3D""><br class=3D""></font></div><div class=3D"" =
style=3D"font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant: normal; font-weight: normal; letter-spacing: normal; =
line-height: normal; orphans: auto; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; widows: auto; word-spacing: =
0px; -webkit-text-stroke-width: 0px;"><font face=3D"DejaVu Sans" =
class=3D""></font></div><span =
id=3D"cid:D9426167-57EE-47E8-BC06-6171C47FBBF0@hsd1.wa.comcast.net." =
class=3D""><type-in-exception.txt></span><div class=3D"" =
style=3D"font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant: normal; font-weight: normal; letter-spacing: normal; =
line-height: normal; orphans: auto; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; widows: auto; word-spacing: =
0px; -webkit-text-stroke-width: 0px;"><font face=3D"DejaVu Sans" =
class=3D""></font></div><div class=3D"" style=3D"font-family: Helvetica; =
font-size: 12px; font-style: normal; font-variant: normal; font-weight: =
normal; letter-spacing: normal; line-height: normal; orphans: auto; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: =
0px;"><font face=3D"DejaVu Sans" class=3D""><br class=3D""></font><div =
class=3D""><blockquote type=3D"cite" class=3D""><div class=3D"">On Jan =
24, 2015, at 8:56 PM, Ryan Cunningham <<a =
href=3D"mailto:rvskmbrly3@gmail.com" =
class=3D"">rvskmbrly3@gmail.com</a>> wrote:</div><br =
class=3D"Apple-interchange-newline"><div class=3D""><div class=3D"" =
style=3D"word-wrap: break-word; -webkit-nbsp-mode: space; =
- -webkit-line-break: after-white-space;"><div class=3D""><font =
face=3D"DejaVu Sans" class=3D"">Dear Mr. Stallman,</font></div><div =
class=3D""><font face=3D"DejaVu Sans" class=3D""><br =
class=3D""></font></div><div class=3D""><font face=3D"DejaVu Sans" =
class=3D"">I am Ryan Cunningham, a high school sophomore and computer =
enthusiast with autism spectrum disorder (ASD). I am simply enthused by =
the idea of free and open-source software.</font></div><div =
class=3D""><font face=3D"DejaVu Sans" class=3D""><br =
class=3D""></font></div><font face=3D"DejaVu Sans" class=3D"">I would =
like to tell you that, while writing a draft Type-In Program Exception =
to the GNU GPL, I=E2=80=99ve made an interesting discovery: Sending a =
here-document to BASH (of course from a shell that supports =
here-documents) can actually enable BASH to execute the same kind of =
type-in program you=E2=80=99d see in the =E2=80=9980s! (Only it=E2=80=99s =
in BASH=E2=80=99s language, not BASIC; by the way, this is not a =
bug.)<br class=3D""></font><div class=3D""><font face=3D"DejaVu Sans" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"DejaVu Sans" class=3D"">A transcript of an example shell session =
proving the same is attached below.</font></div><div class=3D""><font =
face=3D"DejaVu Sans" class=3D""><br class=3D""></font></div><div =
class=3D""><div class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu =
Sans Mono" class=3D"">$<span =
class=3D"Apple-converted-space"> </span><b class=3D"">bash =
<<'EOF'</b></font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">><span =
class=3D"Apple-converted-space"> </span><b =
class=3D"">date</b></font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">><span =
class=3D"Apple-converted-space"> </span><b =
class=3D"">help</b></font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">><span =
class=3D"Apple-converted-space"> </span><b =
class=3D"">EOF</b></font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">Sat Jan 24 20:35:21 PST =
2015</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">GNU bash, version 4.3.30(2)-release =
(x86_64-apple-darwin14.0.0)</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">These shell commands =
are defined internally. Type `help' to see this =
list.</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">Type `help name' to find out more =
about the function `name'.</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">Use `info bash' to find =
out more about the shell in general.</font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" class=3D"">Use =
`man -k' or `info' to find out more about commands not in this =
list.</font></div><div class=3D"" style=3D"margin: 0px; min-height: =
13px;"><font face=3D"DejaVu Sans Mono" class=3D""><br =
class=3D""></font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">A star (*) next to a name means =
that the command is disabled.</font></div><div class=3D"" style=3D"margin:=
0px; min-height: 13px;"><font face=3D"DejaVu Sans Mono" class=3D""><br =
class=3D""></font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> job_spec [&] =
=
history [-c] [-d offset] [n] or hist></font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> (( expression )) =
if COMMANDS; then =
COMMANDS; [ elif C></font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D""> . filename =
[arguments] =
jobs [-lnprs] [jobspec ...] or jobs ></font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> : =
=
kill [-s sigspec | -n signum | -sigs></font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> [ arg... ] =
let arg =
[arg ...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> [[ expression ]] =
=
local [option] name[=3Dvalue] ...</font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> alias [-p] [name[=3Dvalue] ... ] =
logout [n]</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D""> bg [job_spec ...] =
=
mapfile [-n count] [-O origin] [-s c></font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> bind [-lpsvPSVX] [-m keymap] [-f file> popd =
[-n] [+N | -N]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> break [n] =
=
printf [-v var] format [arguments]</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> builtin [shell-builtin [arg ...]] =
pushd [-n] [+N | -N | dir]</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D""> caller [expr] =
=
pwd [-LP]</font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> case WORD in [PATTERN [| PATTERN]...)> read =
[-ers] [-a array] [-d delim] [-></font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" class=3D""> cd=
[-L|[-P [-e]] [-@]] [dir] =
readarray [-n count] [-O origin] [-s></font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> command [-pVv] command [arg ...] =
readonly [-aAf] [name[=3Dvalue] ...] o></font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> compgen [-abcdefgjksuv] [-o option] > =
return [n]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> complete [-abcdefgjksuv] =
[-pr] [-DE] > select NAME [in WORDS ... ;] do =
COMM></font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> compopt [-o|+o option] [-DE] =
[name ..> set [-abefhkmnptuvxBCHP] [-o =
option-></font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> continue [n] =
=
shift [n]</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D""> coproc [NAME] =
command [redirections] shopt [-pqsu] [-o] [optname =
...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> declare [-aAfFgilnrtux] [-p] =
[name[=3Dv> source filename [arguments]</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> dirs [-clpv] [+N] [-N] =
suspend [-f]</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> disown [-h] [-ar] [jobspec ...] =
test [expr]</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D""> echo [-neE] [arg =
...] time =
[-p] pipeline</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> enable [-a] [-dnps] [-f =
filename] [na> times</font></div><div class=3D"" style=3D"margin:=
0px;"><font face=3D"DejaVu Sans Mono" class=3D""> eval [arg =
...] =
trap [-lp] [[arg] signal_spec =
...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> exec [-cl] [-a name] [command =
[argume> true</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D""> exit [n] =
=
type [-afptP] name [name =
...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> export [-fn] [name[=3Dvalue] =
...] or ex> typeset [-aAfFgilrtux] [-p] =
name[=3Dva></font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> false =
=
ulimit [-SHabcdefilmnpqrstuvxT] =
[lim></font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> fc [-e ename] [-lnr] [first] =
[last] o> umask [-p] [-S] [mode]</font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" class=3D""> fg=
[job_spec] =
unalias [-a] name [name =
...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> for NAME [in WORDS ... ] ; do =
COMMAND> unset [-f] [-v] [-n] [name ...]</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D""> for (( exp1; exp2; exp3 )); do COMMAN> until =
COMMANDS; do COMMANDS; done</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D""> function name { =
COMMANDS ; } or name > variables - Names and meanings of =
so></font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> getopts optstring name =
[arg] wait [-n] [id =
...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> hash [-lr] [-p pathname] =
[-dt] [name > while COMMANDS; do COMMANDS; =
done</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D""> help [-dms] [pattern ...] =
{ COMMANDS ; =
}</font></div></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans" class=3D""><br class=3D""></font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans" class=3D"">In=
this model, no command is executed until the here identifier is read, =
and another shell is spawned to execute all commands.<span =
class=3D"Apple-converted-space"> </span><b class=3D"">Only one line =
at a time can be edited.</b></font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans" class=3D""><br =
class=3D""></font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans" class=3D"">To enable the spread of this quite =
obscure (as far as I know) way to execute BASH, I am attaching the draft =
exception I mentioned earlier in this message. (I hereby transfer =
copyright over the same to the Free Software =
Foundation.)</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans" class=3D""><br class=3D""></font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans" class=3D"">If=
one wants to save the typed program so it can be executed again later, =
he should use </font><font face=3D"DejaVu Sans Mono" class=3D""><b =
class=3D"">cat <<'EOF' >input.sh | bash</b></font><font =
face=3D"DejaVu Sans" class=3D""><span =
class=3D"Apple-converted-space"> </span>instead, =
where =E2=80=9Cinput.sh=E2=80=9D is the name of the output =
file.<span class=3D"Apple-converted-space"> </span><b class=3D"">(The=
file will be overwritten without warning if it already =
exists.)</b></font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans" class=3D""><b class=3D""><br =
class=3D""></b></font></div><div class=3D"" style=3D"margin: =
0px;"></div></div><span =
id=3D"cid:83ECD2E0-FDC2-4C23-A600-C60218A0EF62@hsd1.wa.comcast.net." =
class=3D""><type-in-exception.txt></span><div class=3D"" =
style=3D"word-wrap: break-word; -webkit-nbsp-mode: space; =
- -webkit-line-break: after-white-space;"><div class=3D"" style=3D"margin: =
0px;"></div><div class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu =
Sans" class=3D""><br class=3D""></font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans" class=3D"">I thank you =
for your efforts, and I encourage you to spread the news about this =
to<span class=3D"Apple-converted-space"> </span><i class=3D"">Linux =
Format</i> and other GNU/Linux-related magazines, and to individual =
programmers, so they can publish Bourne Again Shell programs for =
execution in this way.</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans" class=3D""><br =
class=3D""></font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans" class=3D"">Sincerely,</font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans" class=3D""><br =
class=3D""></font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans" class=3D"">Ryan =
Cunningham</font></div></div></div></blockquote></div></div></div></blockq=
uote></div><br class=3D""></div></div></div></div></blockquote></div><br =
class=3D""></div></div></div></blockquote></div><br =
class=3D""></div></div></div></div></blockquote></div><br =
class=3D""></div></body></html>=
- --Apple-Mail=_51A7C042-5A82-40D5-B8FA-5586341517FA--
- --Apple-Mail=_0FFE68EB-40A8-4B26-B362-C6D78F1EEECE--
------- End of forwarded message -------
--
Dr Richard Stallman
President, Free Software Foundation
51 Franklin St
Boston MA 02110
USA
www.fsf.org www.gnu.org
Skype: No way! That's nonfree (freedom-denying) software.
Use Ekiga or an ordinary phone call.
- [address@hidden: Re: Type-in programs using BASH],
Richard Stallman <=
- Message not available
- Re: [address@hidden: Re: Type-in programs using BASH], Ryan Cunningham, 2015/01/26
- Re: [address@hidden: Re: Type-in programs using BASH], Greg Wooledge, 2015/01/26
- Re: [address@hidden: Re: Type-in programs using BASH], Ryan Cunningham, 2015/01/26
- Re: [address@hidden: Re: Type-in programs using BASH], Greg Wooledge, 2015/01/26
- Re: [address@hidden: Re: Type-in programs using BASH], Ryan Cunningham, 2015/01/26
- Re: [address@hidden: Re: Type-in programs using BASH], Eduardo A . Bustamante López, 2015/01/26