当我跑
user@hostname:~$ su -- root -z
Run Code Online (Sandbox Code Playgroud)
我得到
bash: -z: invalid option
Usage: bash [GNU long option] [option] ...
...
Run Code Online (Sandbox Code Playgroud)
以上是我期望的行为。
当我跑
user@hostname:~$ su -l -- root -z
Run Code Online (Sandbox Code Playgroud)
我得到
-su: -z: invalid option
Usage: -su [GNU long option] [option] ...
...
Run Code Online (Sandbox Code Playgroud)
我使用 invalid 选项-z只是为了演示哪个命令正在解析该选项。
这种行为让我感到厌烦。su在我宣布选项结束后继续寻找选项。我错过了什么,这是一个错误还是可怕的设计?
Run Code Online (Sandbox Code Playgroud)-su: -z: invalid option Usage: -su [GNU long option] [option] ... ...
这是 Bash 的错误输出,而不是 su。如果你继续引用,下一行会提到一个脚本文件,例如,后面提到的--rcfile选项,显然不属于su. 您还可以与 的输出进行比较su -z,这将是一个不同的错误。
如果你跑
su -l -- root --version
Run Code Online (Sandbox Code Playgroud)
你会看到参数被传递了,它是 Bash 报告它的版本。
Bash 将自己报告为-su(注意-),因为这是在将其su作为登录 shell 调用时的第零个参数中的内容,而不是因为它su本身(甚至是-su)。
请注意,su手册确实指出:
您可以使用
--参数将 su 选项与提供给 shell的参数分开。
这就是这里发生的事情:参数传递给 shell。如果你离开--了,你会得到su错误输出
su: invalid option -- 'z'
Usage: su [options] [LOGIN]
...
Run Code Online (Sandbox Code Playgroud)
反而。
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |