./script와 ./script의 차이점은 무엇입니까? . /스크립트? [복사]

./script와 ./script의 차이점은 무엇입니까? . /스크립트? [복사]

중복 가능성:
사용'. '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

./scriptscript이는 현재 디렉터리에서 파일을 실행한다는 의미입니다. 일반적으로 스크립트를 실행할 때 쉘이 먼저 호출됩니다 fork(). exec()즉, 스크립트는 하위 프로세스(즉, 서브쉘)에서 실행됩니다.

. ./script이와 같은 것은 source ./script현재 쉘에서 스크립트를 실행하지 않고 실행하는 것을 의미합니다.fork()

답변3

첫 번째는 쉘 명령이고 .그 다음은 경로입니다. 두 번째는 단지 길일 뿐입니다.

쉘 명령은 .후속 파일을 현재 쉘 세션에 "소스"합니다. 따라서 설정된 변수는 ./yourprogram실행 중인 세션이나 스크립트에 표시됩니다 . ./yourprogram.

반면에 두 번째 명령은 단순히 ./yourprogram실행을 요청합니다. 이는 적절한 실행 권한이 있는 경우에만 작동 ./yourprogram하며

  1. 바이너리 파일
  2. #!/bin/sh또는 와 같이 "shebang" 줄로 시작하는 언어로 된 스크립트#!/usr/bin/python
  3. 또는 현재 쉘 언어의 스크립트로 shebang 줄이 누락되어 있지만 이 경우 현재 쉘은 기본적으로 하위 쉘에서 스크립트 파일을 실행합니다.

./yourprogram이러한 이벤트 중에는 호출 스크립트나 세션에 셸/환경 변수에 대한 변경 사항이 표시되지 않습니다 .

관련 정보