답변:
에 따르면 man bash
:
bash가 대화식 인 경우 PS1이 설정되고 $-i를 포함하여 쉘 스크립트 또는 시작 파일이이 상태를 테스트 할 수 있도록합니다.
따라서 다음을 사용할 수 있습니다.
if [[ $- == *i* ]]
then
do_interactive_stuff
fi
또한:
로그인 쉘이 아닌 대화식 쉘이 시작되면 bash는 /etc/bash.bashrc 및 ~ / .bashrc (있는 경우)에서 명령을 읽고 실행합니다.
따라서 ~/.bashrc
대화식 쉘 전용입니다. 때때로 사람들 은 예상되는 행동을 방해하기 때문에 그 출처를 ~/.bash_profile
찾거나 ~/.profile
잘못된 것입니다. 일반적인 코드 유지 관리를 단순화하려면 별도의 파일을 사용하여 공통 코드를 포함하고 두 rc 파일과 독립적으로 소스를 제공해야합니다.
로그인 rc
파일과 같이 stdout에 출력이 ~/.bash_profile
없거나 예를 들어 ~/.profile
올바른 작동을 방해 할 수 있으므로 가장 좋습니다 rsync
.
어쨌든 잘못된 구성이 존재할 수 있으므로 대화 형 기능을 테스트하는 것이 좋습니다.
[[ $- =~ i ]] && echo interactive
i
~/.bash_profile
거나 ~/.profile
올바르지 않습니다 . 당신은 소싱에 대해 어떻게 생각하십니까 ~/.bashrc
에서 ~/.bash_login
? 로그인 셸이 대화식 일 필요는 없으므로 잘못된 것 같습니다.
사용하다:
if tty -s; then echo interactive; fi
이 test
도구는 매뉴얼 페이지에서이를 확인할 수 있습니다.
-t FD True if FD is opened on a terminal.
예를 들어 다음을 사용할 수 있습니다.
if [ -t 0 ] ; then
echo stdin is a terminal
.....
fi
또는
if [ -t 1 ] ; then
echo stdout is a terminal
fi
bash <<< 'test -t 0 && echo Y || echo X'
쓰기 Y
, bash -c 'test -t 0 && echo Y || echo X'
쓰기X