답변:
매번 점을 입력하지 않고이 작업을 수행 할 수 있습니까? 예를 들어 스크립트 자체에서 상위 셸로 변경하는 명령?
나는 타이핑하는 것을 제외하고는 생각하지 않지만 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는 같은 것을 위해 "소스"를 사용합니다.