쉘 스크립트에서 쉘 스크립트를 실행하는 방법

쉘 스크립트에서 쉘 스크립트를 실행하는 방법

저는 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위치에 있음 을 나타냅니다.현재의목차. 이 스크립트를 다른 곳에서 실행하면 작동하지 않습니다. 너할 수 있다전체 경로를 사용하세요. 하지만 이 경우 유일하게 합리적인 해결책은 다음과 같습니다.

  1. myshell.sh귀하의 위치에 위치를 추가하십시오 $PATH(만약에 대비해 myshell.sh실제로 어디에서나 호출해야 합니다). 따라서 PATH="$PATH":/dir/of/myshell외부 스크립트의 시작 부분에 추가하십시오.

  2. myshell.sh어디에서나 액세스할 수 있도록 어딘가에 배치합니다 (시스템의 다른 모든 실행 파일과 마찬가지로). 그럴 /usr/local/bin가능성이 가장 높습니다. 일반적으로 유용한 경우에만 이 스크립트를 사용하십시오.

스크립트가 해당 디렉터리의 로컬 파일에 의존하는 경우(다른 곳에서 호출하면 충돌이 발생하고 손상될 수도 있음) 해당 파일을 현재 형식으로 두어야 합니다(실제로 호출하면 안되는 곳에서 호출하는 것을 방지합니다). 또는 cd스크립트 내에서 올바른 위치로 이동하는 데 사용됩니다. 조심하십시오. 쉘 스크립트에서 절대 경로를 사용하십시오. cd문제가 발생하여 더 이상 실패하면 문제가 발생하기 쉽습니다. 디렉토리를 탈출하여 상위 디렉토리 전체를 어수선하게 만들 수 있습니다...cd

대부분의 경우 솔루션 #1을 권장합니다.

답변2

cdYoMismo가 제안한 것처럼 스크립트나 스크립트 디렉터리에서 전체 경로를 사용해야 합니다 .

# 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

관련 정보