쉘 내 쉘 세션에서 많은 수의 bashrc 명령을 반복적으로 평가하지 않으려면 어떻게 해야 합니까?

쉘 내 쉘 세션에서 많은 수의 bashrc 명령을 반복적으로 평가하지 않으려면 어떻게 해야 합니까?

.bash_profile.bashrcBash에서는 로그인 쉘에 의해 실행되는 와 모든 쉘에 의해 실행되는 가 본질적으로 분리되어 있습니다 . 지금 나는이해하다비쉘 프로세스에서 로그인이 아닌 대화형 쉘을 실행하는 것은 매우 흔한 일이므로 저는 .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

관련 정보