POSIX acha que o parâmetro de comando é obrigatório. Então pode ser um bug.
Semelhante a Por que os parâmetros para o Bash são opcionais? , esses comandos não imprimem nada e retornam o código de saída 0 se nenhum parâmetro for fornecido. Mas, ao contrário de builtin
, o estado help
de saída que pelo menos um parâmetro é obrigatório . Isso é um bug, um recurso ou eu entendi mal alguma coisa?
$ bash --version
GNU bash, version 4.2.10(1)-release (x86_64-pc-linux-gnu)
$ type -a command
command is a shell builtin
$ type -a type
type is a shell builtin
$ help -s command
command: command [-pVv] command [arg ...]
$ help -s type
type: type [-afptP] name [name ...]
$ command
$ echo $?
0
$ type
$ echo $?
0
POSIX acha que o parâmetro de comando é obrigatório. Então pode ser um bug.
Para command
, a explicação imediata é provavelmente que ksh faz a mesma coisa (pelo menos ATT ksh93, pdksh e mksh não fazem nada quando você executa command
sem argumento, eu não tenho ATT ksh88 para testar) .
Por que o ksh se comporta desse jeito, eu não sei. Uma tentativa de explicação é que command foo
é muito parecido com foo
, e se você deixar de fora foo
, você obtém um comando shell que não faz nada (mas ainda realiza redirecionamentos). Estranhamente, com ksh 93s + 2008-01-31 (mas não com pdksh, mksh, bash, ash ou zsh), ksh -c 'foo=bar command; echo $foo'
exibe bar
, o que significa que a atribuição é tratada como uma atribuição de variável shell e não como um comando atribuição de ambiente local. Esse comportamento é esperado apenas dos utilitários especiais internos , que command
não é (a justificativa explica por que não). Isso parece um bug no ksh93.
Em ksh, builtin
exibe uma lista de utilitários integrados, o que é útil.
type
é um caso diferente: aceita vários argumentos e gera relatórios sobre cada um deles (por exemplo, type ls cd
). Ter zero argumentos é uma continuação natural desse comportamento.
Tags bash