`set`에 bash 옵션 나열 정보

`set`에 bash 옵션 나열 정보

명령을 사용하여 콘솔 설정을 인쇄하면 기본적으로 출력이 echo $-설정됩니다 . himBHs그러나 스크립트 파일에서 동일한 명령을 실행하면 hB.

root@root:~# echo $-
himBHs
root@root:~# ./abc.sh 
hB
root@root:~#

제가 알고 싶은 것은 /bin/bash환경에서 스크립트를 실행하더라도 동일한 기본 설정이 적용되지 않는 이유는 무엇입니까?

예를 들어, 다음 명령을 사용하여 새로운 하위 쉘 프로세스를 시작할 때/bin/bash 콘솔에서설정을 나열하면 출력이 표시됩니다 himBHs.

root@root:~# /bin/bash
root@root:~# echo $-
himBHs

내부에서 동일한 프로세스를 실행하려고 하면쉘 파일, 내가 얻는 출력은 "HB".

root@root:~# ./abc.sh 
hB

Shebang을 사용하거나 사용하지 않고 동일한 프로세스를 시도했지만 스크립트 파일이 있거나 실행 bash script_file하면 동일한 결과( )가 나타납니다../script_filehB

내가 무엇을 놓치고 있나요?

답변1

스크립트를 실행할 때 상위 셸(명령을 실행하는 셸)은 스크립트를 실행하기 위해 비대화형 셸을 시작합니다. 이 셸에는 대화형 플래그가 비활성화되고 i두 가지 옵션만 켜져 있습니다.

  • -h실행할 명령을 찾을 때 (해시) 명령을 찾아서 기억하세요.
  • -B쉘이 중괄호 확장을 수행하도록 허용

set출력에 표시되는 전체 옵션 목록을 볼 수 있습니다 $-.내장 컬렉션

-i셸이 대화형 모드에서 실행되도록 지시하는 대화형 셸에서 사용할 수 있는 추가 옵션

  • -m작업 제어 허용
  • -H!스타일 기록 교체 활성화

답변2

Bash가 POSIX 모드에서 대화식으로 실행되는지 여부에 따라 기본적으로 여러 설정이 활성화(또는 비활성화)됩니다. 예를 들어 출력에서 ​​다음과 같습니다 help set.

  -H  Enable ! style history substitution.  This flag is on
      by default when the shell is interactive.

또는:

  -p  Turned on whenever the real and effective user ids do not match.

공교롭게도 Bash의 POSIX가 아닌 대화형 모드의 경우 활성화된 옵션은 다음과 같습니다 himBHs( -i대화형 모드의 경우 -s표준 입력에서 명령을 읽기 위한 다른 옵션은 에 나열되어 있습니다 help set).

관련 정보