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분명히 속하지 않는 스크립트 파일(예: 다음 options )을 언급합니다 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]
...

대신에.

관련 정보