안드로이드 이클립스 디버그 튜토리얼을 따르는 동안 다음 명령이 발생합니다.
cd /path/to/android/root
. build/envsetup.sh
lunch 1
make
emulator
내 문제는 이전의 점이 무엇을 build/envsetup.sh
의미합니까?
답변
해당 컨텍스트에서 점은 해당 파일의 내용을 현재 쉘로 “소스”한다는 의미입니다. 로 source
그 자체가 쉘 내장 명령 인. 그리고 source
도트 연산자는 동의어입니다.
예
sample.sh
파일에 다음 내용이 있다고 가정 해보십시오 .
$ cat sample.sh
echo "hi"
echo "bye?"
이제 내가 그것을 출처 :
$ . sample.sh
hi
bye?
$
이와 같은 파일은 환경 변수에 항목을 추가하는 것과 같은 설정 명령을 통합하는 데 종종 사용됩니다.
예
다른 파일에 이러한 명령이 있다고 가정 해보십시오 addvars.sh
.
$ cat addvars.sh
export VAR1="some var1 string"
export VAR2="some var2 string"
현재 쉘 환경에 변수가 없습니다.
$ env | grep VAR
$
이제이 파일을 소싱하면 :
$ . addvars.sh
$
좋아, 아무것도하지 않은 것처럼 보이지만 env
변수를 다시 확인하면 :
$ env | grep VAR
VAR1=some var1 string
VAR2=some var2 string
답변
slm의 답변에 추가하려면 다음을 수행하십시오.
쉘 스크립트를 실행하는 방법은 두 가지가 있습니다. 하나는 별도의 프로세스에서 스크립트를 실행하는 것입니다. 즉, “자식”쉘 프로세스를 실행하기 전에 쉘 환경 (메모리 상태)에 대한 모든 내용이 “부모”쉘의 상태로 되돌아갑니다.
예를 들어, 현재 작업 디렉토리 (파일 시스템에있는 파일 시스템의 위치)는 프로세스별로 결정됩니다. 자, 다음과 같은 스크립트를 만들어 봅시다 :
#!/bin/bash
cd ~
cd ..
pwd
자,이 스크립트를 호출하겠습니다 foo
. 이 스크립트를 다음과 같이 실행 해 봅시다 :./foo
우리는 다음을 볼 것입니다 :
/home
(많은 Linux 및 기타 UNIX 복제본 배포본이 있으며 그 중 일부는 사용자의 디렉토리를 넣지 않습니다 /home
. 또는 “마일리지가 다를 수 있습니다”라는 표준 고지 사항
이제이 스크립트를 실행 한 후이 명령을 입력하겠습니다
pwd
우리가 어떤 디렉토리에 있는지 보려면 다음과 같이 보일 것입니다.
/home/username
다시 한 번, 우리가 실행 한 쉘 스크립트에는 자체 환경 (명령이 실행되는 자체 디렉토리 포함)이 있었으며 스크립트 실행이 끝나면 해당 환경이 사라졌습니다.
자, foo
이렇게 스크립트를 실행 해 봅시다
. ./foo
또는 동등하게 :
source ./foo
pwd
나중에 수행하면 다음 과 같이 표시됩니다.
/home
그 이유는 다음과 같습니다. 스크립트 소싱은 별도의 프로세스를 호출하지 않습니다. 부모 프로세스에서 모든 명령을 직접 입력하는 것과 같습니다. 스크립트가 끝난 후에도 환경이 유지됩니다.
더 간단한 예를 생각해 보겠습니다. 다음과 같은 스크립트를 보자.
#!/bin/bash
exit
이름을 지어 봅시다 foo
. 실행할 수 있는지 확인하십시오 : chmod 755 foo
. 그런 다음 다음과 같이 실행하십시오.
./foo
아무 반응이 없습니다. 그러나 반면에 우리가 이렇게하면 :
. ./foo
아니면 이거:
source ./foo
우리는 로그 아웃했다.
답변
마침표 (마침표)는 내장 된 bash의 축약 형입니다 source
. 현재 환경의 파일에서 명령을 읽고 실행하며 마지막으로 실행 된 명령의 종료 상태를 반환합니다. 파일은 현재 디렉토리 또는에있을 수 있습니다 PATH
. 실행 가능할 필요는 없습니다.
답변
알아내는 방법.
# type .
. is a shell builtin
# help .
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
답변
. (소스 또는 도트 연산자)
현재 쉘 컨텍스트의 파일 이름 인수에서 명령을 읽고 실행하십시오.
Syntax
. filename [arguments]
source filename [arguments]
source는 점 / 마침표 ‘.’의 동의어입니다. bash에서는 POSIX sh에서는 그렇지 않으므로 최대 호환성을 위해 마침표를 사용하십시오.
소스를 사용하여 스크립트를 실행할 때 기존 쉘 내에서 실행되면 스크립트가 작성하거나 수정 한 모든 변수는 스크립트가 완료된 후에도 사용 가능한 상태로 유지됩니다. 반대로 스크립트가 파일 이름으로 실행되는 경우 스크립트를 실행하기 위해 별도의 하위 세트 (완전히 별도의 변수 세트가있는)가 생성됩니다.
.ss64script (ss64script)를 실행하여 스크립트를 실행하는 것과. ss64script (도트 스페이스 ss64script)
첫 번째는 ‘ls’명령에서 숨겨진 파일을 실행합니다 (ls -a는 숨겨진 파일을 표시하지만) 두 번째 옵션은 chmod를 사용하여 실행 파일로 설정되지 않은 경우에도 ss64script를 실행합니다.
답변
TL; DR
점은 소스 명령과 동일합니다.
source는 현재 컨텍스트에서 실행되는 명령 목록으로 명령 뒤의 파일을 평가하는 Unix 명령입니다.