종종 실행하려는 스크립트가 현재 작업 디렉토리에 없으며 실제로 떠나고 싶지 않습니다.
다른 디렉토리에서 스크립트 (BASH, Perl 등)를 실행하는 것이 좋습니까? 그들은 보통 제대로 운영하는 데 필요한 모든 것을 찾을 수 있습니까?
그렇다면 “먼”스크립트를 실행하는 가장 좋은 방법은 무엇입니까? 그렇습니까
. /path/to/script
또는
sh /path/to/script
sudo
그런 경우 어떻게 사용 합니까? 예를 들어, 작동하지 않습니다.
sudo . /path/to/script
답변
sh / path / to / script는 새로운 쉘을 생성하고 현재 쉘과 독립적으로 스크립트를 실행합니다. 그만큼source
(.) 명령은 현재 쉘 스크립트의 모든 명령을 호출합니다. exit
예를 들어 스크립트가 호출 되면 현재 쉘이 손실됩니다. 이 때문에 일반적으로 sh를 사용하여 별도의 셸에서 스크립트를 호출하거나 전체 (/로 시작) 또는 상대 경로 (./)를 사용하여 스크립트를 바이너리로 실행하는 것이 더 안전합니다. 바이너리로 호출되면 지정된 인터프리터 (예 : #! / bin / bash)로 실행됩니다.
스크립트가 필요한 파일을 찾을 수 있는지 여부를 아는 경우 스크립트를보고 수행하는 작업을 보는 것 외에는 정답이 없습니다. 옵션으로, 현재 폴더를 떠나지 않고 하위 프로세스에서 스크립트 폴더로 항상 이동할 수 있습니다.
$(cd /wherever/ ; sh script.sh)
답변
당신은 확실히 할 수 있습니다 (다른 사람들이 언급 한 조정으로 sudo sh /pathto/script.sh
또는 ./script.sh
). 그러나 나는 시스템 전체를 실행하여 dirs에 대해 걱정하지 않고 여분의 타이핑을 절약하기 위해 몇 가지 작업 중 하나를 수행합니다.
1) Symlink /usr/bin
ln -s /home/username/Scripts/name.sh /usr/bin/name
(명명하게 덮어 쓰기 때문에 중복되는 이름이 없는지 확인하십시오.) 또한 필요에 따라 조정할 수 있도록 개발 폴더에 이름을 유지할 수 있습니다.
2) 스크립트 디렉토리를 경로에 추가하십시오 (.bash_profile 또는 쉘에있는 whatever.profile 사용)
PATH=/path/to/scripts/:$PATH
3) 별명 년대에 만들기 .bash_profile
에 ~/.bash_profile
같은 추가 뭔가 :
alias l="ls -l"
알다시피, 구문은 별명이며, 명령으로 작동하려는 숫자, 명령입니다. 따라서 터미널의 어느 곳에 나 “l”을 입력 ls -l
하면 sudo를 원한다면 alias sl="sudo ls -l"
l 대 sl을 쓸모가 없습니다.
어느 쪽이든, 당신은 입력 sudo nameofscript
하고 당신의 길에있을 수 있습니다. ./ 또는으로 망칠 필요가 없습니다. 또는 sh 등입니다. 먼저 실행 파일로 표시하십시오. : D
답변
나는 보통 네가 말하는 것처럼
sh /path/to/script
루트 / 수퍼 유저로 실행하려면
sudo sh /path/to/script
현재 디렉토리는 스크립트에서 사용자가 동일한 폴더에 있다고 가정하는 경우에만 중요합니다. 나는 대부분의 스크립트가 이것을하지 않는다고 가정하고 위와 같이 실행하도록 저장됩니다.
답변
필자는 일반적으로 파일 시스템 계층 표준 (FHS)에 따라 스크립트가 속하는 ( /usr/local/bin
또는 /usr/local/sbin/
스크립트가 루트 권한이 필요한 경우) 스크립트를 유지 합니다.
이 두 디렉토리가에 추가되었는지 확인하기 만하면 PATH
됩니다. $HOME/.bashrc
파일 을 편집 하고 다음 줄을 추가하면됩니다.
export PATH=$PATH:/usr/local/sbin:/usr/local/bin
를 통해 루트로 스크립트를 실행할 수 있으려면 sudo
이 디렉토리를의 변수 secure_path
에 추가해야 합니다 /etc/sudoers
.
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
이 파일 편집은 visudo
실수 로 실행 되지 않도록 실행 하여 수행됩니다 .
답변
아무도 제안하지 않으면 리눅스에서 이와 같이 작동하는지 확실하지 않습니다. 그러나 ././를 사용하여 디렉토리로 돌아가는 대신. 따옴표를 사용하여 절대 경로를 줄 수 있습니까? 어쩌면 실제로 그것을 생각하기 위해 전체 드라이브에 액세스 할 수없는 경우도 있습니다.
답변
주위에 스크립트가 있으면 자주 실행해야하고 리소스를 찾기 위해 해당 위치에 의존하는 경우 명령을 이와 같은 별칭으로 결합하여 쉽게 수행 할 수 있습니다.
alias run-script="cd /home/user/path/to/script/ && bash script.sh"
이런 식으로 작동시키기 위해 다른 것을 변경할 필요가 없습니다.
답변
아무도 이걸 제안하지 않은 이유는 확실하지 않지만 매우 쉽습니다! 몇 번 Google에 검색했는데 내가 제공 한 정확한 답변을 찾지 못해 공유 할 것이라고 생각했습니다. 어쨌든 나에게 이것은 최고의 솔루션이지만 가장 쉬운 IMO이지만 다른 사람들은 다르게 느끼고 일할 수 있습니다.
# Place this somewhere in your .bashrc/.bash_profile/etc and edit as you see fit
YOURCOMMAND () {
cd /path/to/directory/containing/your/script/ && ./YOURSCRIPT
}
먼저 ‘cd’명령으로 스크립트 위치의 디렉토리를 알려줍니다. 그런 다음 ‘&&’를 사용하여 다음 명령을 실행 한 후 묶을 수 있습니다. 마지막으로 터미널 내에서 실행하는 것처럼 스크립트를 엽니 다! BASH 파일에 저장하고 설정하는 데 5 초가 걸립니다.
이것이 누군가를 도왔기를 바랍니다.