다른 스크립트의 백그라운드에서 스크립트를 실행하려고 할 때 "해당 파일이나 디렉터리가 없습니다"

다른 스크립트의 백그라운드에서 스크립트를 실행하려고 할 때 "해당 파일이나 디렉터리가 없습니다"

백그라운드에서 다른 스크립트를 실행하려고 하면 run.sh 스크립트에 오류가 발생합니다.

콘솔 오류 문자열

./run.sh 30: nohup bash /export/home/myself/bin/mytestprogram &>/dev/null & : No such file or directory
  • 호스트가 인터넷에 없기 때문에 스크립트를 게시할 수 없습니다.


이것은 유효하다

대상 프로그램의 절대 경로를 구축합니다.

예를 들어: 대상 스크립트의 절대 경로

/export/home/myself/bin/mytestprogram

수동으로 또는 스크립트를 통해 잘 작동합니다. 아래와 같이 스크립트 변수를 사용하여 이 명령줄을 작성합니다.

Bash 스크립트가 명령 문자열을 작성하는 방법

cmd="${exedir}/${exe}"

나는 다음과 같은 스크립트에서 이것을 실행합니다.

대상 명령 문자열을 호출하는 Bash 스크립트 줄

"${cmd}"

모두 유효합니다 ... 따라서 포그라운드에서 스크립트를 실행하면 작동합니다.


이제 백그라운드에서 정확히 동일한 경로와 명령을 실행하려고 하면 아무 것도 작동하지 않습니다.

나는 실행하려고합니다 :

백그라운드에서 명령 문자열 실행

nohup bash /export/home/myself/bin/mytestprogram &>/dev/null &

스크립트 출력에서 ​​명령줄로 수동으로 파이프하면 작동합니다. 명령줄에서 수동으로 호출하면 작동합니다. 내 스크립트는 실제로 콘솔의 명령을 반영하고, 잘라내어 붙여넣었고 작동했습니다. 그런데 run.sh 스크립트가 동일한 명령을 호출하면 작동하지 않나요?

아래와 같이 위의 전경 호출과 동일한 변수를 사용하여 구축했습니다.

백그라운드 명령 문자열이 구성되는 방법

cmd="nohup bash ${exedir}/${exe} &>/dev/null &"

이 명령을 다음과 같이 콘솔에 표시합니다.

콘솔에 백그라운드 명령 문자열을 보내는 방법

echo -e "$cmd"

그리고 그렇게 부르세요..

"$cmd"

다시 내 오류 메시지는 다음과 같습니다.

콘솔 오류 문자열

./run.sh 30: nohup bash /export/home/myself/bin/mytestprogram &>/dev/null &
:No such file or directory

어떤 아이디어가 있나요?

답변1

  1. 당신이 찾고있는 명령은 nohup...not 입니다 nohub.

  2. 당신은 이것을 할 수 없습니다:

    cmd="nohub bash ${exedir}/${exe} &>/dev/null &"
    "${cmd}"
    

    그것이 하고 있는 일은 다음으로 구성된 명령을 실행하려고 하는 것입니다.한 단어 nohub bash /export/home/myself/bin/mytestprogram &>/dev/null &-단어의 일부로 공백과 구두점을 포함합니다.. 쉘은 명령을 평가하지 않고 공백으로 분할합니다.

여기에는 다음과 같은 몇 가지 답변이 있습니다.변수에 저장된 명령을 어떻게 실행할 수 있나요?에서는 명령을 안전하게 작성하고 실행하는 방법을 설명합니다. 개인적으로는 명령어를 변수에 넣어서 그 값을 실행하려고 하기보다는 그냥 사용하고 싶을 때 명령어를 실행해 보는 것이 더 좋다고 생각합니다.

관련 정보