명령을 실행하고 터미널을 즉시 종료하려면 어떻게 해야 합니까?

명령을 실행하고 터미널을 즉시 종료하려면 어떻게 해야 합니까?

내가 하려는 것이 무엇인지 매우 명확해야 합니다.

원본 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 &

관련 정보