환경 관리자를 설치하는 bash 스크립트를 작성 중인데, 이는 여러 디렉터리에 무언가를 설치해야 함을 의미합니다. 내 다른 거 좀 봐질문자세한 내용은. 그러나 그것은 내 접근 방식을 다시 생각하게 만들었습니다.
나는 이제 이것을 3개의 별도 bash 스크립트로 만드는 것을 고려하고 있습니다. 그러면 한 사람이 다른 사람에게 전화를 겁니다. 문제는 다음과 같습니다. source .bash_profile
상위 셸에서 작업을 수행해야 합니다. 문제는 bash 스크립트 내에서 호출된 bash 스크립트가 새 셸이나 상위 셸에서 실행될 것인가, 아니면 상위 셸 내의 호스트 bash 스크립트 셸 내의 새 셸에서 실행될 것인가입니다.
"쉘-셉션" 그게 내 뇌를 요리하고 있다는 걸 알아요. 저는 이 프로세스를 자동화하고 싶은데 이것이 바로 제가 직면하고 있는 벽입니다.
답변1
셸에서 명령을 실행하는 경우 해당 명령은 항상 해당 셸의 하위 프로세스로 실행됩니다.
- 내장 쉘입니다 (예
cd
: ) - 출처는 (
. /path/to/file
,source /path/to/file
) - 그것은에 의해 실행됩니다
exec
간편체크를 이용하시면 됩니다 ps -e -o pid,ppid,user,args
.
source .bash_profile
변수가 내보내기용으로 표시된 경우에만 하위 쉘에 영향을 미칩니다( 참조 declare -x
).
답변2
실제 차이점은 다음과 같습니다.
명령을 실행하면 셸이 하위 프로세스를 생성합니다. 이전에 하위 프로세스에 정의된 모든 환경 변수는 상위 프로세스에서 손실됩니다.
스크립트를 사용하여
source
현재 프로세스(상위 프로세스 내)에서 강제로 실행되도록 합니다. 그러면 스크립트의 환경 변수가 보존됩니다.