![명령을 실행하고 터미널을 즉시 종료하려면 어떻게 해야 합니까?](https://rvso.com/image/1413931/%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EA%B3%A0%20%ED%84%B0%EB%AF%B8%EB%84%90%EC%9D%84%20%EC%A6%89%EC%8B%9C%20%EC%A2%85%EB%A3%8C%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)
내가 하려는 것이 무엇인지 매우 명확해야 합니다.
원본 script.sh:
select blah in foo bar oof rab
do
cmd $blah
break
done
꽤 기본적인 것들. 다음을 시도하면 문제가 발생합니다.
> xterm -e 'script.sh'
script.sh는 쉘에서 호출될 때 잘 작동합니다. 하지만 fvwm에서 호출하려고 하면 " cmd $blah
"의 결과가 표시되지 않습니다. 다음 수정을 시도해도 아무 소용이 없습니다.
select blah in foo bar oof rab
do
nohup cmd $blah > /dev/null 2>&1 &
break
done
원하는 기능을 어떻게 얻을 수 있나요? (즉, 선택을 수행한 다음 명령이 백그라운드에서 실행되는 동안 스스로 종료될 수 있을 만큼 xterm 팝업을 어떻게 만들 수 있습니까?)
답변1
스크립트의 마지막 줄에 다음을 추가할 수 있습니다.기다려 PIDPID
관심 있는 백그라운드 명령에 대한 지시 가 완료됩니다. 물론 이를 PID
스크립트에 저장해야 합니다.
#!/bin/bash
# do first stuff...
select blah in foo bar oof rab
do
cmd $blah &
PID_TO_WAIT_FOR=$! # here you store the PID of the last command
break
done
# do other stuff
wait $PID_TO_WAIT_FOR
노트:
- wait는 쉘 내장 명령입니다.지정된 각 프로세스가 완료되고 종료 상태를 반환할 때까지 기다립니다. 이것을 참고하시면 됩니다돕다.
답변2
xterm
새 세션에서 실행한 다음 현재 터미널을 종료 하면 적합합니까 ? 새 제품은 계속 작동해야 합니다.
xterm -e "bash -c \"./script.sh; exec bash\"" &
편집하다:
다음 접근 방식을 사용하면 터미널의 GUI에서 스크립트를 실행하고, 실행할 명령을 선택하고, 터미널을 종료하고 명령이 계속 작동하도록 할 수 있습니다. 예를 들어 commandscript.sh에 몇 가지 명령을 넣었습니다.
선택스크립트.sh:
#!/bin/bash
# Bash Menu Script Example
PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Option 1")
echo "you chose choice 1"
;;
"Option 2")
echo "you chose choice 2 HEXDUMP"
nohup bash commandscript.sh
;;
"Option 3")
echo "you chose choice 3"
;;
"Quit")
break
;;
*) echo invalid option;;
esac
done
명령스크립트.sh:
#!/bin/bash
exec hexdump /dev/urandom | grep --line-buffered -i "ffff f" > random &