쉘이 로그인/대화형/배치인지 확인하는 방법

쉘이 로그인/대화형/배치인지 확인하는 방법

대화형 쉘, 로그인 쉘, 배치 쉘의 차이점을 이해한 것 같습니다. 자세한 도움말은 다음 링크를 참조하세요.

내 질문은 대화형, 로그인 또는 배치 셸을 사용하는 경우 명령/조건으로 어떻게 테스트합니까?입니다.

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_shellshopt -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

관련 정보