![쉘 내 쉘 세션에서 많은 수의 bashrc 명령을 반복적으로 평가하지 않으려면 어떻게 해야 합니까?](https://linux55.com/image/199489/%EC%89%98%20%EB%82%B4%20%EC%89%98%20%EC%84%B8%EC%85%98%EC%97%90%EC%84%9C%20%EB%A7%8E%EC%9D%80%20%EC%88%98%EC%9D%98%20bashrc%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EB%B0%98%EB%B3%B5%EC%A0%81%EC%9C%BC%EB%A1%9C%20%ED%8F%89%EA%B0%80%ED%95%98%EC%A7%80%20%EC%95%8A%EC%9C%BC%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
.bash_profile
.bashrc
Bash에서는 로그인 쉘에 의해 실행되는 와 모든 쉘에 의해 실행되는 가 본질적으로 분리되어 있습니다 . 지금 나는이해하다비쉘 프로세스에서 로그인이 아닌 대화형 쉘을 실행하는 것은 매우 흔한 일이므로 저는 .bashrc
. 둘 다 실행 중이 아닙니다 .bashrc
. 그래서 나는 .bashrc
어떤 의미에서 "최상위" 대화형 셸에서만 발생하도록 내가 수행하는 일부 작업을 어떻게든 제한하고 싶습니다 .
이 작업을 수행하는 방법에 대한 몇 가지 규칙이 있나요? 아니면 장점에 비해 고민이 너무 많은 걸까요?
답변1
대화형이든 아니든 기존 프로세스에서 새로운 bash 프로세스가 생성되는 경우 원하는 작업은 .bashrc가 (완전히) 다시 가져오는 것을 방지하는 것 같습니다.
다음을 수행할 수 있습니다.
Hello, I am a "first" shell
$ cat .bashrc
[ -n "$SPAWNING" ] && return
export SPAWNING=yes
echo 'Hello, I am a "first" shell'
$ bash
$
exit
$ env -i bash
Hello, I am a "first" shell
$ exit
$
앞서 보여드린 것처럼 모든 환경 변수가 지워진 상태에서 새 bash가 생성되면 도움이 되지 않는다는 점을 기억하는 것이 여전히 중요합니다.
답변2
"$-" 변수는 호출될 때 현재 쉘에 대한 옵션을 포함합니다. 대화형 쉘을 나타내는 "i"가 있음을 알 수 있습니다.
case "$-" in
*i*) echo in interactive shell
# do interactive-only setup here
;;
esac