Bash: `set -i` 실행의 효과?

Bash: `set -i` 실행의 효과?

오늘 나는 의 문서를 읽고 있었는데 , 내 플래그 변수( )에 도움말 페이지( ) 에 문서화되지 않은 플래그가 포함되어 있다는 set것을 깨달았습니다.$-help setGNU.org: i.
시간이 지나서야 찾을 수 있었어요이 페이지이는 다음을 i의미하는 상태입니다.인터렉티브.
물론 제가 가장 먼저 시도한 것은 전원을 끄는 것이었습니다.
를 실행한 후에 set +i$-더 이상 가 포함되지 않았지만 i그 외에는 모든 것이 여전히 정상적으로 작동하고 있었습니다.
마찬가지로, set -i스크립트 파일을 넣는 것은 실행할 때 뚜렷한 효과가 없습니다.

그래서 제 질문은: set -i/를 set +i스크립트에 넣거나 명령줄에서 실행하면 실제로 변수를 수정하는 것 외에 어떤 효과가 있습니까 $-?

답변1

쉘이 초기화된 후 명령줄에서 set -i또는 를 사용한 유일한 결과는 의 값을 변경하는 것입니다 . 이 옵션은 쉘을 생성하기 위해 호출할 때만 의미있게 사용될 수 있으며 , 이 경우 쉘이 대화형이 되도록 강제합니다.set +i$--ibash

Bash 소스를 빠르게 살펴보면 실행 중 대화형 검사가 interactive초기화 시퀀스 중에 설정되고 수정되지 않는 전역 변수를 참조한다는 것을 알 수 있습니다. 오직 전역 을 사용 set [+-]i하십시오 . ( 가 설정된 경우 true로 설정되고 그렇지 않으면 에 설명된 대로 설정됩니다 .)$-forced_interactiveinteractiveforced_interactiveman bash

답변2

bash-1.14.7-14에는 매뉴얼 페이지에 -i 옵션에 대한 문서가 있습니다. https://bugzilla.redhat.com/show_bug.cgi?id=1129

   -i        If the -i option is present, the shell is interactive.

대화형 쉘은 tty의 사용자 입력에서 명령을 읽습니다. 무엇보다도 이러한 셸은 활성화 시 시작 파일을 읽고 프롬프트를 표시하며 기본적으로 작업 제어를 활성화합니다. 사용자는 셸과 상호 작용할 수 있습니다. 스크립트를 실행하는 셸은 항상 비대화형 셸입니다.

자세한 내용은 여기를 참조하세요:

http://www.tldp.org/LDP/abs/html/intandnonint.html https://unix.stackexchange.com/questions/43385/what-do-you-mean-by-interactive-shell

추가: 더 많은 링크

비 로그인 쉘에 대한 정말 좋은 답변

https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells

대화형 쉘에 대한 bash 매뉴얼

http://www.gnu.org/software/bash/manual/html_node/Interactive-Shell-Behavior.html#Interactive-Shell-Behavior

관련 정보