Por que os parâmetros para o 'comando' e 'tipo' do Bash são opcionais?

4

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
    
por l0b0 18.04.2012 / 15:24

2 respostas

3

POSIX acha que o parâmetro de comando é obrigatório. Então pode ser um bug.

especificação do comando POSIX 2008

    
por 18.04.2012 / 17:05
2

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.

    
por 19.04.2012 / 02:39

Tags