![비대화형 셸을 시작할 때 무언가가 항상 실행되고 있는지 어떻게 확인할 수 있나요?](https://linux55.com/image/229634/%EB%B9%84%EB%8C%80%ED%99%94%ED%98%95%20%EC%85%B8%EC%9D%84%20%EC%8B%9C%EC%9E%91%ED%95%A0%20%EB%95%8C%20%EB%AC%B4%EC%96%B8%EA%B0%80%EA%B0%80%20%ED%95%AD%EC%83%81%20%EC%8B%A4%ED%96%89%EB%90%98%EA%B3%A0%20%EC%9E%88%EB%8A%94%EC%A7%80%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%99%95%EC%9D%B8%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
스크립트가 있다고 가정해 보겠습니다.
#!/bin/bash
whoami
foo
이 스크립트를 실행할 때 항상 실행 전에 인쇄 되도록 하고 싶습니다 . 사실, 나는 foo
스크립트가 실행되기 전에 인쇄되기를 원합니다(이 예제뿐만 아니라).
이 파일을 사용해 보았지만 bashrc
작동하지 않는 것 같습니다.
case $- in
*i*) echo "foo";;
*) return;;
esac
답변1
~/.bashrc
bash
posix 모드에서 실행되지 않는 비로그인 대화형 호출에 의해서만 해석됩니다.
bash를 호출할 때마다 해석되는 파일의 경우(posix 모드에서 실행되는 파일 제외) 다음을 사용할 수 있습니다 $BASH_ENV
.
$ cat ~/.bashenv
if [[ $- != *i* ]]; then
echo foo
fi
$ export BASH_ENV=~/.bashenv
$ bash -c 'echo bar'
foo
bar
이것이 echo foo
단지 bash의 해석을 위한 것이라면스크립트, 즉 bash
호출 될 때 bash /path/to/file
( #! /bin/bash
shebang을 사용하거나더 정확한 #! /bin/bash -
형태) 다른 형태의 비대화형 셸 호출(예: ( bash -c code
코드 실행 시, , GNU...에 의해 수행됨) 또는 ) 대신 로 변경할 수 있습니다.xterm
vi
parallel
$SHELL
bash < file
[[ $- != *i* ]]
[[ $- != *[ics]* ]]
zsh에 해당하는 것은 ~/.zshenv
(또는 $ZDOTDIR/.zshenv
)입니다.
통과하지 않는 한 모든 csh/tcsh는 read()를 호출합니다 ~/.cshrc
(이것이 대부분의 csh 스크립트에 shebang이 있는 이유입니다).~/.tcshrc
-f
#! /bin/csh -f
ksh는 를 준수했지만 $ENV
보안상의 이유로 비대화형 쉘에서는 중단되었습니다( $ENV
대화형 호출 처리는 여전히 POSIX 요구 사항이며 sh
쉘 사용자 정의 파일을 가질 수 있는 유일한 방법입니다).
¹ as로 호출될 때 sh
, 환경이 있을 때 $POSIXLY_CORRECT
또는 SHELLOPTS=posix
wih로 호출될 때 와 같습니다 -o posix
. ~/.bashrc
일부 bash 버전을 사용하여 ssh를 통해 비대화형 호출을 수행할 때 bash 쉘에서 해석될 수도 있습니다. Bash 시작 파일 처리는 약간 혼란스럽습니다.