bug-bash
[Top][All Lists]
Advanced

[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 =
&lt;<a href=3D"mailto:rvskmbrly3@gmail.com"; =
class=3D"">rvskmbrly3@gmail.com</a>&gt; 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>&nbsp;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.">&lt;t=
ype-in-addendum.txt&gt;</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 &lt;<a =
href=3D"mailto:rvskmbrly3@gmail.com"; =
class=3D"">rvskmbrly3@gmail.com</a>&gt; 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"">&lt;type-in-exception.txt&gt;</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 =
&lt;<a href=3D"mailto:rvskmbrly3@gmail.com"; =
class=3D"">rvskmbrly3@gmail.com</a>&gt; 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"">&lt;type-in-exception.txt&gt;</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 &lt;<a href=3D"mailto:rvskmbrly3@gmail.com"; =
class=3D"">rvskmbrly3@gmail.com</a>&gt; 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&nbsp;=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"">&lt;type-in-exception.txt&gt;</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 &lt;<a =
href=3D"mailto:rvskmbrly3@gmail.com"; =
class=3D"">rvskmbrly3@gmail.com</a>&gt; 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">&nbsp;</span><b class=3D"">bash =
&lt;&lt;'EOF'</b></font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&gt;<span =
class=3D"Apple-converted-space">&nbsp;</span><b =
class=3D"">date</b></font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&gt;<span =
class=3D"Apple-converted-space">&nbsp;</span><b =
class=3D"">help</b></font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&gt;<span =
class=3D"Apple-converted-space">&nbsp;</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.&nbsp; 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"">&nbsp;job_spec [&amp;]&nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; history [-c] [-d offset] [n] or hist&gt;</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;(( expression ))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if COMMANDS; then =
COMMANDS; [ elif C&gt;</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&nbsp;. filename =
[arguments]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; jobs [-lnprs] [jobspec ...] or jobs &gt;</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; kill [-s sigspec | -n signum | -sigs&gt;</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;[ arg... ]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let arg =
[arg ...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;[[ expression ]]&nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
local [option] name[=3Dvalue] ...</font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;alias [-p] [name[=3Dvalue] ... ]&nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; logout [n]</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&nbsp;bg [job_spec ...] =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; mapfile [-n count] [-O origin] [-s c&gt;</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;bind [-lpsvPSVX] [-m keymap] [-f file&gt;&nbsp; popd =
[-n] [+N | -N]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;break [n] &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; printf [-v var] format [arguments]</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;builtin [shell-builtin [arg ...]] &nbsp; &nbsp; &nbsp; =
pushd [-n] [+N | -N | dir]</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&nbsp;caller [expr] =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; pwd [-LP]</font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;case WORD in [PATTERN [| PATTERN]...)&gt;&nbsp; read =
[-ers] [-a array] [-d delim] [-&gt;</font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&nbsp;cd=
 [-L|[-P [-e]] [-@]] [dir]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
readarray [-n count] [-O origin] [-s&gt;</font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;command [-pVv] command [arg ...]&nbsp; &nbsp; &nbsp; =
&nbsp; readonly [-aAf] [name[=3Dvalue] ...] o&gt;</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;compgen [-abcdefgjksuv] [-o option]&nbsp; &gt;&nbsp; =
return [n]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;complete [-abcdefgjksuv] =
[-pr] [-DE] &gt;&nbsp; select NAME [in WORDS ... ;] do =
COMM&gt;</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;compopt [-o|+o option] [-DE] =
[name ..&gt;&nbsp; set [-abefhkmnptuvxBCHP] [-o =
option-&gt;</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;continue [n]&nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; shift [n]</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&nbsp;coproc [NAME] =
command [redirections]&nbsp; &nbsp; shopt [-pqsu] [-o] [optname =
...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;declare [-aAfFgilnrtux] [-p] =
[name[=3Dv&gt;&nbsp; source filename [arguments]</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;dirs [-clpv] [+N] [-N]&nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; suspend [-f]</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;disown [-h] [-ar] [jobspec ...] &nbsp; &nbsp; &nbsp; =
&nbsp; test [expr]</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&nbsp;echo [-neE] [arg =
...] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; time =
[-p] pipeline</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;enable [-a] [-dnps] [-f =
filename] [na&gt;&nbsp; times</font></div><div class=3D"" style=3D"margin:=
 0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&nbsp;eval [arg =
...]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; trap [-lp] [[arg] signal_spec =
...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;exec [-cl] [-a name] [command =
[argume&gt;&nbsp; true</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&nbsp;exit [n]&nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type [-afptP] name [name =
...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;export [-fn] [name[=3Dvalue] =
...] or ex&gt;&nbsp; typeset [-aAfFgilrtux] [-p] =
name[=3Dva&gt;</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;false &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; ulimit [-SHabcdefilmnpqrstuvxT] =
[lim&gt;</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;fc [-e ename] [-lnr] [first] =
[last] o&gt;&nbsp; umask [-p] [-S] [mode]</font></div><div class=3D"" =
style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&nbsp;fg=
 [job_spec] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unalias [-a] name [name =
...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;for NAME [in WORDS ... ] ; do =
COMMAND&gt;&nbsp; unset [-f] [-v] [-n] [name ...]</font></div><div =
class=3D"" style=3D"margin: 0px;"><font face=3D"DejaVu Sans Mono" =
class=3D"">&nbsp;for (( exp1; exp2; exp3 )); do COMMAN&gt;&nbsp; until =
COMMANDS; do COMMANDS; done</font></div><div class=3D"" style=3D"margin: =
0px;"><font face=3D"DejaVu Sans Mono" class=3D"">&nbsp;function name { =
COMMANDS ; } or name &gt;&nbsp; variables - Names and meanings of =
so&gt;</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;getopts optstring name =
[arg]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wait [-n] [id =
...]</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;hash [-lr] [-p pathname] =
[-dt] [name &gt;&nbsp; while COMMANDS; do COMMANDS; =
done</font></div><div class=3D"" style=3D"margin: 0px;"><font =
face=3D"DejaVu Sans Mono" class=3D"">&nbsp;help [-dms] [pattern ...] =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { 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">&nbsp;</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&nbsp;</font><font face=3D"DejaVu Sans Mono" class=3D""><b =
class=3D"">cat &lt;&lt;'EOF' &gt;input.sh | bash</b></font><font =
face=3D"DejaVu Sans" class=3D""><span =
class=3D"Apple-converted-space">&nbsp;</span>instead, =
where&nbsp;=E2=80=9Cinput.sh=E2=80=9D is the name of the output =
file.<span class=3D"Apple-converted-space">&nbsp;</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"">&lt;type-in-exception.txt&gt;</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">&nbsp;</span><i class=3D"">Linux =
Format</i>&nbsp;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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]