Russ Allbery <[EMAIL PROTECTED]> writes:

> Okay, here's try number two.  I tried to incorporate the feedback from
> various people.  Please critique.
> 
> --- debian-policy-3.7.2.2/policy.sgml 2006-10-02 15:36:50.000000000 -0700
> +++ /home/eagle/dvl/policy/policy.sgml        2006-11-20 22:35:59.000000000 
> -0800
> @@ -5662,7 +5670,7 @@
>           <file>/etc/default</file>, which typically will have the same
>           base name as the <file>init.d</file> script.  This extra file
>           should be sourced by the script when the script runs.  It
> -         must contain only variable settings and comments in POSIX
> +         must contain only variable settings and comments in SUSv3
>           <prgn>sh</prgn> format.  It may either be a
>           <tt>conffile</tt> or a configuration file maintained by
>           the package maintainer scripts.  See <ref id="config-files">
> @@ -6723,34 +6731,54 @@
>       </p>
>  
>       <p>
> -       The standard shell interpreter <file>/bin/sh</file> can be a
> -       symbolic link to any POSIX compatible shell, if <tt>echo
> -       -n</tt> does not generate a newline.<footnote>
> -           Debian policy specifies POSIX behavior for
> -           <file>/bin/sh</file>, but <tt>echo -n</tt> has widespread
> -           use in the Linux community (in particular including this
> -           policy, the Linux kernel source, many Debian scripts,
> -           etc.).  This <tt>echo -n</tt> mechanism is valid but not
> -           required under POSIX, hence this explicit addition.
> -           Also, rumour has it that this shall be mandated under
> -           the LSB anyway.
> +       Scripts may assume that <file>/bin/sh</file> implements the
> +       SUSv3 Shell Command Language<footnote>
> +         Single UNIX Specification, version 3, which is also IEEE
> +         1003.1-2004 (POSIX), and is available on the World Wide Web
> +         from <url id="http://www.unix.org/version3/online.html";
> +                   name="The Open Group"> after free
> +         registration.</footnote>
> +       plus the following additional features not mandated by
> +       SUSv3:<footnote>
> +         These features are in widespread use in the Linux community
> +         and are implemented in all of bash, dash, and ksh, the most
> +         common shells users may wish to use as <file>/bin/sh</file>.
>         </footnote>
> -       Thus, shell scripts specifying <file>/bin/sh</file> as
> -       interpreter must only use POSIX features. If a script
> -       requires non-POSIX features from the shell interpreter, the
> -       appropriate shell must be specified in the first line of the
> -       script (e.g., <tt>#!/bin/bash</tt>) and the package must
> -       depend on the package providing the shell (unless the shell
> -       package is marked "Essential", as in the case of
> -       <prgn>bash</prgn>).
> +       <list>
> +         <item><tt>echo -n</tt>, if implemented as a shell built-in,
> +           must not generate a newline.</item>
> +         <item><tt>test</tt>, if implemented as a shell built-in, must
> +           support <tt>-a</tt> and <tt>-o</tt> as binary logical
> +           operators.</item>
> +         <item><tt>local</tt> to create a scoped variable must be
> +           supported; however, <tt>local</tt> may or may not preserve
> +           the variable value from an outer scope and may or may not
> +           support arguments more complex than simple variable.  Only
> +              uses such as:
> +<example compact>
> +fname () {
> +    local a
> +    a=''
> +    # ... use a ...
> +}
> +</example>
> +              must be supported.
> +            </item>
> +       </list>
> +       If a shell script requires non-SUSv3 features from the shell
> +       interpreter other than those listed above, the appropriate shell
> +       must be specified in the first line of the script (e.g.,
> +       <tt>#!/bin/bash</tt>) and the package must depend on the package
> +       providing the shell (unless the shell package is marked
> +       "Essential", as in the case of <prgn>bash</prgn>).
>       </p>

I would drop that "special" case and always require explicit
requirement for the shell. It's more clear to see which packages
"need" bash to make them work. someone may then provide a patch to
"make bash go away". I suggest removing the last 2 lines:

          If a shell script requires non-SUSv3 features from the shell
          interpreter other than those listed above, the appropriate shell
          must be specified in the first line of the script (e.g.,
          <tt>#!/bin/bash</tt>) and the package must depend on the package
          providing the shell.
        </p>
  
>       <p>
> -       You may wish to restrict your script to POSIX features when
> -       possible so that it may use <file>/bin/sh</file> as its
> -       interpreter. If your script works with <prgn>dash</prgn>
> -       (originally called <prgn>ash</prgn>), it's probably POSIX
> -       compliant, but if you are in doubt, use
> +       You may wish to restrict your script to SUSv3 features plus the
> +       above set when possible so that it may use <file>/bin/sh</file>
> +       as its interpreter. If your script works with <prgn>dash</prgn>
> +       (originally called <prgn>ash</prgn>), it probably complies with
> +       the above requirements, but if you are in doubt, use
>         <file>/bin/bash</file>.
>       </p>
>  
> -- 
> Russ Allbery ([EMAIL PROTECTED])               <http://www.eyrie.org/~eagle/>


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to