중복 가능성:
사용'. 'Bash에서 파일 실행
.bashrc 파일을 변경하지 않고 스크립트를 통해 환경을 내보내는 방법을 찾으려고 합니다.
내가 찾은이 오래된 유용한 게시물그것은 말했다:
변수는 슬레이브 프로세스로만 내보낼 수 있으며 상위 프로세스로 다시 전달할 수 없습니다. 스크립트가 상위 쉘의 환경에 영향을 미치도록 하려면 스크립트를 실행하십시오.
. ./yourprogram
. ./script
와 의 차이점이 무엇인지 알고 싶습니다 ./script
.
내가 볼 때 현재 디렉터리에서 스크립트를 실행한다는 것은 나에게 무엇을 의미합니까?
답변1
./script
해당 위치에서 "script"라는 파일을 실행합니다 ./
. 이는 "여기"(즉, 현재 디렉터리)로 변환됩니다. 스크립트는 서브셸에서 실행되며, 서브셸이 끝나면 스크립트가 환경에서 수행한 모든 작업이 손실됩니다.
. ./script
./
현재 쉘에 "script"라는 파일을 실행하도록 지시합니다.현재의셸에는 하위 셸이 없으므로 환경에서 발생하는 모든 변경 사항은 스크립트가 중지될 때 유지됩니다.
.
명령의 약어입니다 source
. man()을 사용하여 소스 코드를 찾을 수 있습니다 man source
.
/home/bob/script
./script
마치 당신이 디렉토리에 있는 것 같아요/home/bob
. /home/bob/script
. ./script
마치 당신이 디렉토리에 있는 것 같아요/home/bob
답변2
./script
script
이는 현재 디렉터리에서 파일을 실행한다는 의미입니다. 일반적으로 스크립트를 실행할 때 쉘이 먼저 호출됩니다 fork()
. exec()
즉, 스크립트는 하위 프로세스(즉, 서브쉘)에서 실행됩니다.
. ./script
이와 같은 것은 source ./script
현재 쉘에서 스크립트를 실행하지 않고 실행하는 것을 의미합니다.fork()
답변3
첫 번째는 쉘 명령이고 .
그 다음은 경로입니다. 두 번째는 단지 길일 뿐입니다.
쉘 명령은 .
후속 파일을 현재 쉘 세션에 "소스"합니다. 따라서 설정된 변수는 ./yourprogram
실행 중인 세션이나 스크립트에 표시됩니다 . ./yourprogram
.
반면에 두 번째 명령은 단순히 ./yourprogram
실행을 요청합니다. 이는 적절한 실행 권한이 있는 경우에만 작동 ./yourprogram
하며
- 바이너리 파일
#!/bin/sh
또는 와 같이 "shebang" 줄로 시작하는 언어로 된 스크립트#!/usr/bin/python
- 또는 현재 쉘 언어의 스크립트로 shebang 줄이 누락되어 있지만 이 경우 현재 쉘은 기본적으로 하위 쉘에서 스크립트 파일을 실행합니다.
./yourprogram
이러한 이벤트 중에는 호출 스크립트나 세션에 셸/환경 변수에 대한 변경 사항이 표시되지 않습니다 .