
저는 Mac OSX에서 bash를 사용하고 있습니다.
나는 이라는 쉘 파일을 가지고 있습니다 myshell.sh
. 저는 그것을 많은 일을 하는 데 사용합니다.
다음을 포함하는 Entry.sh 파일이 있습니다.
# content of entrance.sh
./myshell.sh arg1 arg2
./myshell.sh arg3 arg4
하지만 실행하면 entrance.sh
오류가 발생합니다.
./entrance.sh: line 2: myshell.sh: command not found
myshell.sh를 직접 실행할 수 있습니다.
어떡해?
답변1
./myshell.sh
스크립트가 다음 myshell.sh
위치에 있음 을 나타냅니다.현재의목차. 이 스크립트를 다른 곳에서 실행하면 작동하지 않습니다. 너할 수 있다전체 경로를 사용하세요. 하지만 이 경우 유일하게 합리적인 해결책은 다음과 같습니다.
myshell.sh
귀하의 위치에 위치를 추가하십시오$PATH
(만약에 대비해myshell.sh
실제로 어디에서나 호출해야 합니다). 따라서PATH="$PATH":/dir/of/myshell
외부 스크립트의 시작 부분에 추가하십시오.myshell.sh
어디에서나 액세스할 수 있도록 어딘가에 배치합니다 (시스템의 다른 모든 실행 파일과 마찬가지로). 그럴/usr/local/bin
가능성이 가장 높습니다. 일반적으로 유용한 경우에만 이 스크립트를 사용하십시오.
스크립트가 해당 디렉터리의 로컬 파일에 의존하는 경우(다른 곳에서 호출하면 충돌이 발생하고 손상될 수도 있음) 해당 파일을 현재 형식으로 두어야 합니다(실제로 호출하면 안되는 곳에서 호출하는 것을 방지합니다). 또는 cd
스크립트 내에서 올바른 위치로 이동하는 데 사용됩니다. 조심하십시오. 쉘 스크립트에서 절대 경로를 사용하십시오. cd
문제가 발생하여 더 이상 실패하면 문제가 발생하기 쉽습니다. 디렉토리를 탈출하여 상위 디렉토리 전체를 어수선하게 만들 수 있습니다...
cd
대부분의 경우 솔루션 #1을 권장합니다.
답변2
cd
YoMismo가 제안한 것처럼 스크립트나 스크립트 디렉터리에서 전체 경로를 사용해야 합니다 .
# content of entrance.sh
/full/path/myshell.sh arg1 arg2
/full/path2/myshell.sh arg3 arg4
또는 (그러나 이것은 매우 추악한 해결책입니다)
# content of entrance.sh
cd /full/path
./myshell.sh arg1 arg2
cd /full/path2
./myshell.sh arg3 arg4
답변3
내 생각에는 ./myshell.sh에 실행 권한이 없거나('chmod +x myshell.sh'를 수행해야 함) 현재 디렉터리에 없습니다(entry.sh와 동일한 디렉터리로 이동해야 함).
./entrance.sh와 동일한 디렉토리에서 ./myshell을 호출해 보십시오. 동일한 결과를 얻을 수 있습니까?
또는 스크립트 실행에 대해 더 확실하게 하려면 해당 스크립트에서 bash를 직접 호출할 수 있습니다.
/bin/bash ./myshell arg1 arg2