대화형 쉘, 로그인 쉘, 배치 쉘의 차이점을 이해한 것 같습니다. 자세한 도움말은 다음 링크를 참조하세요.
- "로그인"과 "대화형" bash 쉘의 차이점은 무엇입니까(자매 사이트에서:서버 장애)
- 로그인 쉘과 비로그인 쉘의 차이점은 무엇입니까?
- 2.1: 쉘 유형: 대화형 쉘 및 로그인 쉘(에서Z-쉘 사용자 가이드)
내 질문은 대화형, 로그인 또는 배치 셸을 사용하는 경우 명령/조건으로 어떻게 테스트합니까?입니다.
true
명령이나 조건(return 또는 ) 을 찾고 있는데 false
이를 if
명령문에 넣을 수도 있습니다. 예를 들어:
if [[ condition ]]
echo "This is a login shell"
fi
답변1
bash
태그에 쉘이 나열되어 있지 않기 때문에 쉘이나 이와 유사한 것이 있다고 가정합니다 .
대화형 셸에 있는지 확인하려면 다음을 수행하세요.
[[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive'
로그인 쉘에 있는지 확인하려면 다음을 수행하십시오.
shopt -q login_shell && echo 'Login shell' || echo 'Not login shell'
"배치"란 "비대화형"을 의미한다고 가정하므로 대화형 셸을 확인하는 것만으로도 충분합니다.
답변2
Bourne 스타일 셸에서 이 i
옵션은 셸이 대화형인지 여부를 나타냅니다.
case $- in
*i*) echo "This shell is interactive";;
*) echo "This is a script";;
esac
로그인 쉘을 테스트하는 이식 가능하고 완전히 안정적인 방법은 없습니다. Ksh 및 zsh가 .Bash l
에 추가 되어 $-
. 이식 가능한 테스트가 : 로 시작하는 경우 호출자가 인수 0에 접두사(일반적으로 실행 파일의 이름 또는 경로)를 추가하기 때문에 쉘은 일반적으로 자신이 로그인 쉘임을 인식합니다. 이는 로그인 쉘(예: )을 호출하는 쉘별 방법을 감지할 수 없습니다 .login_shell
shopt -q login_shell
$0
-
-
ash -l
답변3
생선 껍질
fish
다른 사용자가 이 페이지를 우연히 발견한 경우에 대한 답변입니다.
if status --is-interactive
# fish is interactive - that is, connected to a keyboard.
# do stuff...
end
if status --is-login
# fish is a login shell - that is, should perform login tasks such as setting up PATH
# do stuff...
end
echo "darn, I really wanted to have to use globs or at least a case statement"
물고기 문서 참조
답변4
또 다른 방법은 결과를 확인하는 것입니다.tty
if [ "`tty`" != "not a tty" ]; then