On Mon, Jun 02, 2008 at 05:12:45PM +0100, Stephane Chazelas wrote:
> On Mon, Jun 02, 2008 at 03:04:55PM +0000, Clint Adams wrote:
> > On Mon, Jun 02, 2008 at 11:58:59AM +0100, Stephane Chazelas wrote:
> > > Another strange requirement that I see no shell implements even
> > > posh, is that if a builtin (such as "[" or "echo" or ":") is not
> > > found in $PATH, its invocation should fail!?!
> > 
> > Could you point me to that in the standard?
> 
> This is so weird that I'm suspecting that either I misinterpret
> it or I missed something.
> 
> Here is the text, please tell me if you understand it
> differently:

Hi Clint,

> Given that I've never seen a /bin/: (as : is built in every
> shell), that would imply that ":" would never work.

":" (colon) is a special built-in, so it was a bad example, but
it is still true for "[", "echo", "printf"...

Do you read me the same way as I do?

> http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_09_01_01
> 
> SUS>   Command Search and Execution
> SUS>
> SUS>If a simple command results in a command name and an optional list of
> SUS>arguments, the following actions shall be performed:
> SUS>
> SUS> 1. If the command name does not contain any slashes, the first successful
> SUS>    step in the following sequence shall occur:
> SUS>
> SUS>      a. If the command name matches the name of a special built-in
> SUS>         utility, that special built-in utility shall be invoked.
> SUS>
> SUS>      b. If the command name matches the name of a function known to this
> SUS>         shell, the function shall be invoked as described in Function
> SUS>         Definition Command. If the implementation has provided a standard
> SUS>         utility in the form of a function, it shall not be recognized at
> SUS>         this point. It shall be invoked in conjunction with the path
> SUS>         search in step 1d.
> SUS>
> SUS>      c. If the command name matches the name of a utility listed in the
> SUS>         following table, that utility shall be invoked.
> SUS>
> SUS>                   alias   false   jobs   read    wait
> SUS>                   bg      fc      kill   true
> SUS>                   cd      fg      newgrp umask
> SUS>                   command getopts pwd    unalias
> SUS>
> SUS>
> SUS>      d. Otherwise, the command shall be searched for using the PATH
> SUS>         environment variable as described in the Base Definitions volume
> SUS>         of IEEE Std 1003.1-2001, Chapter 8, Environment Variables:
> SUS>
> SUS>          i. If the search is successful:
> SUS>
> SUS>               a. If the system has implemented the utility as a regular
> SUS>                  built-in or as a shell function, it shall be invoked at
> SUS>                  this point in the path search.
> SUS>
> SUS>               b. Otherwise, the shell executes the utility in a separate
> SUS>                  utility environment (see Shell Execution Environment)
> SUS>                  with actions equivalent to calling the execve() function
> SUS>                  as defined in the System Interfaces volume of
> SUS>                  IEEE Std 1003.1-2001 with the path argument set to the
> SUS>                  pathname resulting from the search, arg0 set to the
> SUS>                  command name, and the remaining arguments set to the
> SUS>                  operands, if any.
> SUS>
> SUS>                  If the execve() function fails due to an error
> SUS>                  equivalent to the [ENOEXEC] error defined in the System
> SUS>                  Interfaces volume of IEEE Std 1003.1-2001, the shell
> SUS>                  shall execute a command equivalent to having a shell
> SUS>                  invoked with the pathname resulting from the search as
> SUS>                  its first operand, with any remaining arguments passed
> SUS>                  to the new shell, except that the value of "$0" in the
> SUS>                  new shell may be set to the command name. If the
> SUS>                  executable file is not a text file, the shell may bypass
> SUS>                  this command execution. In this case, it shall write an
> SUS>                  error message, and shall return an exit status of 126.
> SUS>
> SUS>             Once a utility has been searched for and found (either as a
> SUS>             result of this specific search or as part of an unspecified
> SUS>             shell start-up activity), an implementation may remember its
> SUS>             location and need not search for the utility again unless the
> SUS>             PATH variable has been the subject of an assignment. If the
> SUS>             remembered location fails for a subsequent invocation, the
> SUS>             shell shall repeat the search to find the new location for
> SUS>             the utility, if any.
> SUS>
> SUS>          ii. If the search is unsuccessful, the command shall fail with
> SUS>              an exit status of 127 and the shell shall write an error
> SUS>              message.
> 
> Given that I've never seen a /bin/: (as : is built in every
> shell), that would imply that ":" would never work.

-- 
Stéphane



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

Reply via email to