스크립트가 있다고 가정해 보겠습니다.
#!/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 시작 파일 처리는 약간 혼란스럽습니다.