Quando eu corro
user@hostname:~$ su -- root -z
eu recebo
bash: -z: invalid option
Usage: bash [GNU long option] [option] ...
...
O acima é o comportamento que eu espero.
Quando eu corro
user@hostname:~$ su -l -- root -z
eu recebo
-su: -z: invalid option
Usage: -su [GNU long option] [option] ...
...
Eu uso a opção inválida -z
apenas para demonstrar qual comando está analisando a opção.
Esse comportamento me irrita sem fim. su
continuei procurando opções depois que declarei fim das opções. Estou faltando alguma coisa, isso é um bug ou apenas um design horrível?
Esta é a saída de erro do Bash, não do su. Se você continuou citando, a próxima linha menciona um arquivo de script, por exemplo, e mais tarde a
--rcfile
opção, que claramente não pertence asu
. Você também pode comparar com a saída desu -z
, que será um erro diferente .Se você correr
você verá que o argumento é passado e é o Bash que relata sua versão.
O Bash está se reportando como
-su
(observe o-
) porque é isso que está em seu argumento zero quandosu
o invoca como um shell de login, não porque é elesu
mesmo (ou mesmo-su
).Observe que o
su
manual realmente afirma que:que é o que está acontecendo aqui: o argumento é passado para o shell. Se você tivesse deixado de
--
fora, obteria asu
saída de erroem vez de.