누구나 어디서나 스크립트를 실행할 수 있도록 허용하는 방법

누구나 어디서나 스크립트를 실행할 수 있도록 허용하는 방법

이 주제는 이전에 논의되었지만 내가 읽는 모든 기사는 나를 더욱 혼란스럽게 만듭니다.

예를 들어 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. 왜냐하면 포함하는 디렉터리가 여러분의 디렉터리에 있으면 쉘이 다른 스크립트를 실행하도록 선택할 수 있기 때문입니다. 이것이 설정된 터미널에서는 현재 작업 디렉터리에 상관없이 실행이 가능하다.testtest$PATHexport PATH=$PATH:/home/Bill/scripts$PATHtest

스크립트가아니요에서 $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/bintesttest

답변2

이미 "test" 명령이 있으므로 스크립트 이름을 "test"로 지정하는 것은 좋은 생각이 아닙니다.

유형 테스트
테스트는 쉘에 내장되어 있습니다

이 외에도 PATH 변수는 항상 프로그램이나 스크립트를 찾는 데 사용될 수 있습니다. 따라서 PATH에 스크립트 경로를 입력하십시오.

내보내기 PATH=/your/place/to/directory_of_script:$PATH

스크립트에 쉽게 액세스할 수 있게 됩니다. 그러나 쉘 내장 이름이나 기타 기존 프로그램 또는 스크립트 이름을 사용하지 마십시오!

관련 정보