더 높은 수준의 폴더에서 실행 파일을 호출하는 매우 간단한 스크립트를 작성하려고 합니다. 방금 콘솔에 명령을 입력했다면 다음과 같이 입력했을 것입니다.
../filenamehere {options} {parameters}
동시에 여러 프로세스를 실행하기 위해 .sh 파일에서 동일한 작업을 수행하려고 할 때 다음과 같이 작성하려고 합니다.
../filename {options} {parameters} &
../filename {options2} {parameters} &
../filename {options3} {parameters} &
../filename {options4} {parameters} &
그런 다음 파일을 실행하기 위해 다음을 입력합니다.
chmod a+x script_file.sh
./script_file.sh
그 이후로 "명령을 찾을 수 없음" 오류가 3번이나 발생했습니다. 이는 내 명령 4개 중 1개가 실행되었지만 나머지 3개는 실행되지 않았다는 의미라고 생각합니다. .sh 파일에 입력한 것과 동일한 명령을 콘솔에 직접 입력하면 문제가 발생하지 않습니다. 이 파일을 실행하려면 어떻게 해야 합니까?
답변1
심볼릭 링크를 사용하시나요?
신뢰할 수 있는 스크립트를 작성하려면 "dirname $0"을 사용하면 안 됩니다. 호출 명령과 관련된 $0 명령과 관련이 있습니다. 디렉토리를 탐색하려면 "readlink -f $0"을 사용하십시오.
basedir="$(dirname $(readlink -f $0))"
$basedir/../filename {options} {parameters} &
readlink -f
링크, 작업 디렉토리 등에 관계없이 스크립트의 절대 경로를 제공합니다.
답변2
실행 파일을 호출하기 전에 스크립트를 실행하여 pwd
첫 번째 실행 파일을 실행한 후 스크립트가 디렉터리를 변경하는지 확인할 수 있습니다.
pwd
../filename {options} {parameters} &
pwd
../filename {options2} {parameters} &
pwd
../filename {options3} {parameters} &
pwd
../filename {options4} {parameters} &
답변3
호출 방법(절대 경로, 상대 경로 또는 셸의 $PATH 사용)에 관계없이 스크립트의 현재 위치를 알아야 할 것 같습니다. 이를 알고 나면 현재 위치와 관련된 경로로 다른 실행 파일을 참조할 수 있습니다.
다음을 사용하여 실행 중인 스크립트의 현재 위치를 가져올 수 있습니다.
MYLOC=`dirname $0`
...그런 다음 이 변수를 사용하여 상대 실행 파일을 실행합니다.
$MYLOC/../filename
이는 현재 작업 디렉터리(예: $pwd)에 관계없이 작동하며 쉘의 $PATH를 통해 스크립트를 찾아 실행하더라도... 스크립트가 절대 또는 상대 경로를 통해 실행되는 경우 $0에는 연결이 있습니다. ...의 값 또는 쉘의 $PATH를 검색하여 스크립트가 실행되는 경우 $0에는 스크립트 파일의 절대 전체 경로가 포함됩니다.
답변4
사용 시 현재 작업 디렉토리를 변경할 수 있습니다 ../filename
. 따라서 다음 줄에서 사용하는 것이 좋습니다 script_file.sh
.
current_directory=$(pwd)
../filename {options} {parameters} &
cd $current_directory
../filename {options2} {parameters} &
cd $current_directory
../filename {options3} {parameters} &
cd $current_directory
../filename {options4} {parameters} &
그러면 확실히 예상한 결과가 나올 것입니다.