쉘에서 명령을 호출하는 방법
아니요, 명령이 아닙니다. 쉘이 작동하는 방식은 한 줄의 텍스트를 입력 할 때 첫 단어는 명령으로 취급되며, 명령이 쉘 내장 명령 중 하나가 아닌 경우 쉘은 PATH
환경 변수에 나열된 모든 위치를 봅니다. .
실행하려는 명령이 현재 찾은 디렉토리와 동일한 디렉토리에 있지만 해당 디렉토리가 PATH
디렉토리 목록에없는 경우 어떻게됩니까? 그때 당신이 사용해야 ./
합니다. 원하는 방식으로 /bin/bash
쉘에 전체 경로를 알려주는 것입니다. 그리고 ./의 경우에는 "이 디렉토리를 보라"고 말하는 것입니다. 따라서 중요한 부분은 파일이있는 동일한 디렉토리에 있어야한다는 것입니다.
물론 실제로 실행 파일을 실행하려면 실행 가능 비트가 설정되어 있어야합니다 chmod +x ./my_file
.
중요한 단계 :
cd
파일 을 저장 한 위치 ; 그것은에 있다면 ~/Downloads
다음,cd ~/Downloads
- 실행
chmod +x ./truecrypt-7.2-setup-x86
, 이것은 "에 메이크업 파일의 TrueCrypt-7.2-설치-86라고 이 디렉토리의 실행"
- 그리고 지금
sudo ./truecrypt-7.2-setup-x86
사용은 ./
임의의 동작이 아니라 실제로 POSIX (Portable Operating System Interface) 표준에 의해 지정된 표준이며 , 특히 "명령 검색 및 실행"섹션을 참조하십시오.
오류 재현
$ # my script is in ~/Downloads folder
$ stat -c "%n" /home/xieerqi/Downloads/my_script.sh
/home/xieerqi/Downloads/my_script.sh
$ # if I run sudo ./my_script.sh, we get an error
$ sudo ./my_script.sh
[sudo] password for xieerqi:
sudo: ./my_script.sh: command not found
$ # of course the command not found because file is not in ./, not in this dir
$ # this is not sudo's problem
$ # but sudo does indeed show the same error even if you're in same directory
$ cd ./Downloads/
$ sudo ./my_script.sh
[sudo] password for xieerqi:
sudo: ./my_script.sh: command not found
참고 : 오류 메시지 sudo
는 분명히 오해의 소지가 있으므로 명심해야합니다. 그러나 이것은 OP가 요구하는 질문의 핵심 이 아니 었 습니다 .
설명서 및 참조
에서 bash
4.3 수동, "명령 실행"섹션 :
이름이 쉘 함수도 아니고 내장도 아니며 슬래시를 포함하지 않는 경우, bash는 PATH의 각 요소에서 해당 이름으로 실행 파일이 들어있는 디렉토리를 검색합니다.
에서 왜 스크립트 이름 앞에 ./ 당신이 필요로하는 (도트 슬래시) 할 떠들썩한 파티에서 실행하는? :
POSIX 는 /를 포함하는 명령 이름을 파일 이름으로 직접 사용하여 $ PATH에서 검색을 억제하도록 지정 하기 때문에 ./와 함께 작동 합니다 . 똑같은 효과를 위해 전체 경로를 사용할 수는 있지만 ./는 더 짧고 쓰기 쉽습니다.
./
명령 의 일부는 "현재 디렉토리를보고 여기에서 'truecrypt-7.2-setup-x86'명령을 실행하십시오"라고 말합니다. 파일의 압축을 푼 디렉토리에서이 명령을 실행해야합니다.