이 주제는 이전에 논의되었지만 내가 읽는 모든 기사는 나를 더욱 혼란스럽게 만듭니다.
예를 들어 test라는 간단한 bash hello world 스크립트를 사용합니다. Bill 사용자로 생성하여 chmod 755 test
실행 가능하게 만들었습니다. 스크립트를 찾았고 /home/Bill/scripts
내보내려고 합니다.PATH=$PATH:/home/Bill/scripts
해당 디렉토리 에 있으면 ./test
./home/Bill
루트 디렉터리로 전환하면 환경 경로에 스크립트를 추가했거나 내보내기 명령을 사용한 것 같은데도 스크립트를 찾을 수 없습니다.
또한 스크립트에 스크립트 경로를 추가할 수 /etc/sudoers
있으며 비밀번호가 필요하지 않지만 이를 실행하려면 사용자가 필요하다는 내용도 읽었습니다 sudo ./test
. 이 스크립트를 어디서나 모든 사용자가 보편적으로 액세스하고 실행할 수 있도록 하는 방법이 있습니까?
./test
반면에 test
제가 만든 스크립트의 차이점에 대해 조금 혼란스럽습니다. test
그런데 저나 다른 사용자가 스크립트를 실행하면 스크립트를 실행하는 건가요, 아니면 ./test
그냥 실행하는 건가요?test
답변1
스크립트 경로(상대 또는 절대)를 지정하거나 스크립트가 포함된 디렉토리가 셸 검색에 포함되어 있는지 확인하여 스크립트를 실행할 수 있습니다 $PATH
.
이 예제의 이름이 좋지 않다는 사실은 잠시 무시하십시오 test
. 왜냐하면 포함하는 디렉터리가 여러분의 디렉터리에 있으면 쉘이 다른 스크립트를 실행하도록 선택할 수 있기 때문입니다. 이것이 설정된 터미널에서는 현재 작업 디렉터리에 상관없이 실행이 가능하다.test
test
$PATH
export PATH=$PATH:/home/Bill/scripts
$PATH
test
스크립트가아니요에서 $PATH
또는 명시적으로 지정하려는 경우어느 test
실행하려는 경우 파일 이름뿐만 아니라 파일의 상대 또는 절대 경로도 제공할 수 있습니다. 따라서 현재 작업 디렉터리에 관계없이 전체 경로( )를 제공하여 항상 스크립트를 실행할 수 있습니다 /home/Bill/scripts/test
.
일부 예에서는 상대 경로를 제공하여 스크립트를 실행할 수도 있습니다. 여기서 프롬프트는 작업 디렉터리를 나타냅니다.
/home/Bill/scripts$ ./test
/home/Bill$ scripts/test
/home/Bill/documents$ ../scripts/test
/home/James/documents$ ../../Bill/scripts/test
실행하려고 하면 오류가 발생하는 이유
/home/Bill$ ./test
파일이 없기 때문에 /home/Bill/test
실행하려는 것입니다 ( " test
현재 디렉토리의 파일 .
")
모든 사용자가 스크립트에 대한 절대 또는 상대 경로를 제공하지 않고 이름만 사용하여 스크립트를 실행할 수 있도록 하려면 해당 스크립트가 모든 사용자의 에 있어야 합니다 $PATH
. 예를 들어 모든 사용자의 기본 위치에 스크립트를 배치 . 하지만 스크립트 이름을 다른 것으로 지정해야 합니다 . 왜냐하면 이는 특수한 경우이기 때문입니다. 이는 쉘 내장입니다./home/Bill/scripts
$PATH
$PATH
/usr/local/bin
test
test
답변2
이미 "test" 명령이 있으므로 스크립트 이름을 "test"로 지정하는 것은 좋은 생각이 아닙니다.
유형 테스트 테스트는 쉘에 내장되어 있습니다
이 외에도 PATH 변수는 항상 프로그램이나 스크립트를 찾는 데 사용될 수 있습니다. 따라서 PATH에 스크립트 경로를 입력하십시오.
내보내기 PATH=/your/place/to/directory_of_script:$PATH
스크립트에 쉽게 액세스할 수 있게 됩니다. 그러나 쉘 내장 이름이나 기타 기존 프로그램 또는 스크립트 이름을 사용하지 마십시오!