
Beim Ausführen wird einfach builtin
nichts ausgegeben und der Exit-Code 0 zurückgegeben. Dies steht im Einklang mit help builtin
, das alle Parameter als optional anzeigt. Aber warum ist dieser No-Op kein Fehler? Gibt es dafür einen Anwendungsfall? Ein nützlicheres Ergebnis wäre ein Fehlercode oder, noch besser, eine Auflistung der aktuell verfügbaren integrierten Funktionen.
Antwort1
Integrierte Bash-Funktionen sind inkonsistent und schlecht dokumentiert.
Hier ist ein Beispiel:
$ help command
command: command [-pVv] command [arg ...]
Runs COMMAND with ARGS ignoring shell functions. If you have a shell
function called 'ls', and you wish to call the command `ls', you can
say "command ls". If the -p option is given, a default value is used
for PATH that is guaranteed to find all of the standard utilities. If
the -V or -v option is given, a string is printed describing COMMAND.
The -V option produces a more verbose description.
$ command; echo $?
0
Auch ohne command
Rückgabecode $? -eq 0
liegt kein Fehler vor std err
.
Noch einer:
$ help disown
disown: disown [-h] [-ar] [jobspec ...]
By default, removes each JOBSPEC argument from the table of active jobs.
If the -h option is given, the job is not removed from the table, but is
marked so that SIGHUP is not sent to the job if the shell receives a
SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all
jobs from the job table; the -r option means to remove only running jobs.
$ disown; echo $?
-bash: disown: current: no such job
1
Alle Argumente sind optional, werden aber zurückgegeben, $? -eq 1
wenn keine vorhanden sind.
Ich habe sogar die neueste Bash 4.2 kompiliert und hier sind meine Ergebnisse:
$ help command
command: command [-pVv] command [arg ...]
Execute a simple command or display information about commands.
Runs COMMAND with ARGS suppressing shell function lookup, or display
information about the specified COMMANDs. Can be used to invoke commands
on disk when a function with the same name exists.
Options:
-p use a default value for PATH that is guaranteed to find all of
the standard utilities
-v print a description of COMMAND similar to the `type' builtin
-V print a more verbose description of each COMMAND
Exit Status:
Returns exit status of COMMAND, or failure if COMMAND is not found.
$ command; echo $?
0
Es gibt einen neuen Abschnitt „Exit Status“ und command
es handelt sich immer noch um ein optionales Argument. Noch schlimmer als 3.x. Dasselbe gilt für andere integrierte Funktionen.
Sie haben also Recht. Die integrierten Bash-Funktionen sind ein einziges Chaos und sollten repariert werden.