답변:
매번 점을 입력하지 않고이 작업을 수행 할 수 있습니까? 예를 들어 스크립트 자체에서 상위 셸로 변경하는 명령?
나는 타이핑하는 것을 제외하고는 생각하지 않지만 source somescript.sh
아마도 당신이 찾고있는 것이 아닐 것입니다 ^^.
으로 평소와 같이 스크립트를 실행하면 ./somescript.sh
셸에서이 명령 을 실행하고 실행합니다 . 명령을 커널로 전달한 다음, 커널 #!
은 스크립트 내부의 행 을 구문 분석하여이 명령의 실행 방법을 결정합니다 . 그런 다음 커널은 지정된 인터프리터 (이 경우 아마도 bash
서브 쉘)를 시작합니다. 따라서 수정 사항 somescript.sh
은 부모 셸에 영향을주지 않고 서브 쉘에서 환경을 격리시킵니다.
쉘이 다른 프로세스를 시작하지 않고 스크립트 자체를 읽으려면 .
or source
키워드 를 사용하여 명시 적으로 알려야합니다 .
alias
, scott이 제안한 것처럼 부모 쉘이 명령으로 하위 쉘을 만들지 말라고 말할 수 있습니다 .
./somescript.sh
외부 프로그램으로 실행하면 내 보내지 않은 변수 액세스, 변수 설정, 현재 디렉토리 변경 등과 같은 실행중인 셸 프로세스 내부에서 아무것도 수행 할 수 없습니다.이 문제를 해결할 방법이 없습니다.
(자, 하위 프로세스에서 디버거를 실행하고 부모 프로세스의 메모리를 조정할 수 있습니다. 그러나 시도하면 부모 셸이 충돌 할 가능성이 큽니다.)
당신은 실행해야합니다 . ./somescript.sh
. 원하는 경우 별칭 또는 함수 뒤에 숨길 수 있지만, 부모 쉘에서 별칭 또는 함수 정의를 다시 수행해야합니다.
실행하려는 스크립트가 실행 가능하지 않다고 생각합니다. chmod a+x somescript.sh
사용자, 그룹 및 기타 (ugo)에 대한 실행 비트를 해당 파일에 추가합니다. 파일의 첫 줄에는 #! 상단에 줄이 #!/bin/bash
있습니다.
ls -l somescript.sh
파일에 대한 rwx 트리플렛 (읽기 / 쓰기 / 실행)이 표시됩니다. 파일을 소유하고 있다고 가정하면 적어도 첫 번째 세트에는 x가 필요합니다.
export PATH=$PATH:/usr/local/bin
$ PATH에 / usr / local / bin을 추가 하는 등 스크립트에서 원하는 변수 내보내기가 작동하지 않으면 실행중인 환경 변수를 변경하기 위해 파일을 소스해야합니다. 이 질문은 실제로 "bash 스크립트에서 실행중인 쉘의 환경 변수를 프로그래밍 방식으로 어떻게 변경합니까?"입니다. 스크립트 . ./somescript.sh
가 제대로 실행되고 있습니다. dot 명령을 사용하여 파일을 소싱하고 있습니다. tcsh는 같은 것을 위해 "소스"를 사용합니다.