当我跑
user@hostname:~$ su -- root -z
我明白了
bash: -z: invalid option
Usage: bash [GNU long option] [option] ...
...
以上是我期望的行为。
当我跑
user@hostname:~$ su -l -- root -z
我明白了
-su: -z: invalid option
Usage: -su [GNU long option] [option] ...
...
我仅使用无效选项-z
来演示哪个命令正在解析该选项。
这种行为让我很恼火。su
在我宣布选项结束后继续搜索选项。我错过了什么,这是一个错误还是只是可怕的设计?
这是 Bash 的错误输出,而不是 su 的错误输出。如果您继续引用,那么下一行会提到一个脚本文件,例如,稍后会提到该
--rcfile
选项,这显然不属于su
. 您还可以与 的输出进行比较su -z
,这将是一个不同的错误。如果你跑
您会看到参数被传递,并且报告其版本的是 Bash。
Bash 将自己报告为
-su
(注意),因为这是作为登录 shell 调用它-
时它的第零个参数中的内容,而不是因为它本身(甚至是)。su
su
-su
请注意,该
su
手册实际上确实指出:这就是这里发生的事情:参数被传递给 shell。如果你遗漏
--
了,你会得到su
错误输出反而。