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 / 13: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 / 15: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 / 00:39

Tags

yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warning – yii\base\ErrorException

PHP Startup: Unable to load dynamic library 'memcached.so' (tried: /usr/lib/php/20190902/memcached.so (/usr/lib/php/20190902/memcached.so: undefined symbol: igbinary_serialize), /usr/lib/php/20190902/memcached.so.so (/usr/lib/php/20190902/memcached.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '796708',
    'url' => 'why-are-parameters-to-bashs-command-and-type-optional',
];

$_COOKIE = [
    'advanced-frontend' => 'orpu03g2k634a91usia9ksdagj',
    '_csrf-frontend' => 'c3ef6ca6c27f9af528775f021407595e2456911cd02212489ada9ead63133281a:2:{i:0;s:14:"_csrf-frontend";i:1;s:32:"og7c-0exd8SZleN5Le9DZaUkMedeyqo0";}',
];

$_SESSION = [
    '__flash' => [],
];