![환경 변수에서 명령을 실행하고 내부에 후행 앰퍼샌드가 작동하도록 하려면 어떻게 해야 합니까?](https://linux55.com/image/165688/%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98%EC%97%90%EC%84%9C%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EA%B3%A0%20%EB%82%B4%EB%B6%80%EC%97%90%20%ED%9B%84%ED%96%89%20%EC%95%B0%ED%8D%BC%EC%83%8C%EB%93%9C%EA%B0%80%20%EC%9E%91%EB%8F%99%ED%95%98%EB%8F%84%EB%A1%9D%20%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
내가 호출하는 작은 스크립트가 있습니다 prompt-to-run
.
prompt_acc=''
read -p 'run `'"$1"'`
' -i "$1" -e prompt_acc
$prompt_acc
이를 통해 명령을 채우는 스크립트를 생성할 수 있지만 전체 스크립트를 중지하지 않고 실행을 편집하거나 건너뛸 수 있는 기회도 제공됩니다.
나는 다른 스크립트를 가지고 있습니다. "실행하고 싶습니다"라고 부르겠습니다 long-running-script
. 자체 터미널에서 실행하고 싶습니다. 왜냐하면 일부 입력을 받은 후에 거기에 앉아서 더 많은 텍스트를 지속적으로 출력하기 때문입니다. prompt-to-run
여러 호출이 포함된 스크립트의 시작 부분부터 실행한 후 원래 터미널로 돌아가서 다음 호출을 실행할 수 있기를 원합니다 prompt-to-run
.
long-running-script
내부에 새 터미널을 열었으므로 수동으로 입력하세요 .
long-running-script &
실행하려는 프로그램을 실행하고 원래 터미널의 프롬프트로 돌아갑니다. 그러나 prompt-to-run 'long-running-script &'
터미널 프롬프트를 반환하지 않습니다. 이는 명령이 환경 변수 내에서 실행되기 때문에 $prompt_acc
내가 원하는 방식으로 해석되지 않기 때문인 것 같습니다.
prompt-to-run
둘 중 하나 또는 둘 다를 변경 하거나 long-running-script
원하는 것을 얻을 수 있는 방법이 있습니까 ?
답변1
당신 말이 맞습니다. 그 이유는 환경 변수 내에서 실행되기 때문입니다. 따라서 전체 후속 텍스트( 포함 &
)가 에 인수로 전달됩니다 long-running-script
.
해결 방법은 파일 $prompt_acc &
대신 파일 $prompt_acc
에 호출을 넣는 것입니다 . 이렇게 하면 prompt-to-run
스크립트를 실행하지 않기로 결정하더라도 &
방해가 되지 않습니다 .
답변2
변수 확장 시 수행되는 유일한 처리는 토큰화 및 와일드카드 확장입니다. 다른 쉘 메타 문자는 무시됩니다.
마치 명령어를 입력한 것처럼 변수의 내용을 실행하려면 다음 명령어를 사용하세요 eval
.
eval "$prompt_acc"
;
이는 따옴표 처리, 로 구분된 여러 명령 실행 , 백그라운드에서 실행 &
, I/O 리디렉션 등을 포함하여 명령의 모든 일반적인 셸 처리를 수행합니다.
그건 그렇고, prompt_acc
이것은 단지 일반적인 쉘 변수일 뿐이며 환경 변수는 아닙니다. 명령은 export
환경에 변수를 넣는 방법입니다.