GNU `su`がオプションエンディングを尊重しないのはなぜですか?

GNU `su`がオプションエンディングを尊重しないのはなぜですか?

私が走るとき

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オプションを宣言した後も引き続きオプションを検索してください。私が何かを見逃しているのでしょうか?これはバグですか、それともひどいデザインですか?

ベストアンサー1

-su: -z: invalid option
Usage:  -su [GNU long option] [option] ...
...

これはsuのエラー出力ではなく、Bashのエラー出力です。引用を続けると、次の行で--rcfile明らかに属していないスクリプトファイル(たとえば、次のオプション)が挙げられますsu。また、の出力と比較することもできますsu -zその他間違い。

走れば

su -l -- root --version

パラメータが渡され、Bashがそのバージョンを報告していることがわかります。

Bashは、ログインシェルとして呼び出されたときに0番目の引数に含まれているため、自分を-su(note)として報告します。それ自体が原因ではありません。-susu-su


suこのマニュアルには次のように記載されています。

--引数を使用して、シェルに指定された引数と su オプションを区別できます。

ここでは、次のようなことが起こります。パラメータがシェルに渡されます。省略するとエラーが出力さ--れます。su

su: invalid option -- 'z'
Usage: su [options] [LOGIN]
...

代わりに。

おすすめ記事