오늘 나는 의 문서를 읽고 있었는데 , 내 플래그 변수( )에 도움말 페이지( ) 에 문서화되지 않은 플래그가 포함되어 있다는 set
것을 깨달았습니다.$-
help set
GNU.org: i
.
시간이 지나서야 찾을 수 있었어요이 페이지이는 다음을 i
의미하는 상태입니다.인터렉티브.
물론 제가 가장 먼저 시도한 것은 전원을 끄는 것이었습니다.
를 실행한 후에 set +i
는 $-
더 이상 가 포함되지 않았지만 i
그 외에는 모든 것이 여전히 정상적으로 작동하고 있었습니다.
마찬가지로, set -i
스크립트 파일을 넣는 것은 실행할 때 뚜렷한 효과가 없습니다.
그래서 제 질문은: set -i
/를 set +i
스크립트에 넣거나 명령줄에서 실행하면 실제로 변수를 수정하는 것 외에 어떤 효과가 있습니까 $-
?
답변1
쉘이 초기화된 후 명령줄에서 set -i
또는 를 사용한 유일한 결과는 의 값을 변경하는 것입니다 . 이 옵션은 쉘을 생성하기 위해 호출할 때만 의미있게 사용될 수 있으며 , 이 경우 쉘이 대화형이 되도록 강제합니다.set +i
$-
-i
bash
Bash 소스를 빠르게 살펴보면 실행 중 대화형 검사가 interactive
초기화 시퀀스 중에 설정되고 수정되지 않는 전역 변수를 참조한다는 것을 알 수 있습니다. 오직 전역 을 사용 set [+-]i
하십시오 . ( 가 설정된 경우 true로 설정되고 그렇지 않으면 에 설명된 대로 설정됩니다 .)$-
forced_interactive
interactive
forced_interactive
man 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 매뉴얼