Как я могу выполнить команду и немедленно выйти из терминала?

это должно быть довольно ясно, что я пытаюсь сделать:

оригинал 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 всплывает достаточно долго, чтобы я сделал выбор, а затем убил себя, пока команда работает в фоновом режиме?)

5
задан Chenmunka
источник

2 ответов

вы можете добавить в качестве последней строки вашего скрипта подождите 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-встроенная команда оболочки. ожидает завершения каждого указанного процесса и возвращения ему статуса завершения. вы можете обратиться к этой help.
0
отвечен Hastur 2014-07-02 10:22:46
источник

подойдет ли он вам, если вы запустите его в новом xterm сессии и выход из текущего терминала? Он должен оставить новый все еще работает.

xterm -e "bash -c \"./script.sh; exec bash\"" &

EDIT:

подход ниже позволяет запускать скрипт из графического интерфейса в терминале, выберите команду для запуска, оставьте терминал и есть команда все еще работает. В качестве примера я помещаю некоторую команду commandscript.sh

selectscript.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

commandscript.sh:

#!/bin/bash
exec hexdump /dev/urandom | grep --line-buffered -i "ffff f" > random &
1
отвечен Ruslan Gerasimov 2014-07-02 01:57:35
источник

Другие вопросы bash command-line linux terminal