如何執行命令並立即退出終端機?

如何執行命令並立即退出終端機?

我想要做什麼應該很清楚:

原始腳本.sh:

select blah in foo bar oof rab
do
  cmd $blah
  break
done

非常基本的東西。當我嘗試以下操作時出現問題:

> xterm -e 'script.sh'

從 shell 呼叫時 script.sh 工作得很好。但是當我嘗試從 fvwm 呼叫它時,我看不到“ cmd $blah”的結果。嘗試以下修改對我沒有任何作用:

select blah in foo bar oof rab
do
  nohup cmd $blah > /dev/null 2>&1 &
  break
done

我怎樣才能實現所需的功能? (也就是說,如何讓 xterm 彈出足夠長的時間以供我進行選擇,然後在命令在後台運行時自行終止?)

答案1

您可以新增作為腳本的最後一行等待PID使用您感興趣的後台命令的指令PID它將完成。當然,您必須將其存儲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 是 shell 內建指令。它等待每個指定的進程完成並返回其終止狀態。 你可以參考這個幫助

答案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 &

相關內容