![Como posso executar um comando e sair imediatamente do terminal?](https://rvso.com/image/1413931/Como%20posso%20executar%20um%20comando%20e%20sair%20imediatamente%20do%20terminal%3F.png)
Deve ficar bem claro o que estou tentando fazer:
script original.sh:
select blah in foo bar oof rab
do
cmd $blah
break
done
Coisas bem básicas. O problema surge quando tento o seguinte:
> xterm -e 'script.sh'
script.sh funciona bem quando chamado de um shell. Mas quando tento chamá-lo do fvwm, não vejo resultados de " cmd $blah
". Tentar a seguinte modificação não faz nada para mim:
select blah in foo bar oof rab
do
nohup cmd $blah > /dev/null 2>&1 &
break
done
Como posso alcançar a funcionalidade desejada? (ou seja, como posso fazer um xterm aparecer por tempo suficiente para fazer uma seleção e depois se matar enquanto um comando é executado em segundo plano?)
Responder1
Você pode adicionar como última linha do seu script umespere PIDinstrução com PID
o comando de fundo que você está interessado, ela será concluída. Claro que você precisa armazenar isso PID
no seu script.
#!/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
Notas:
- wait é um comando interno do shell.Ele espera que cada processo especificado seja concluído e retorne seu status de encerramento. Você pode consultar issoajuda.
Responder2
Será adequado para você executá-lo em uma nova xterm
sessão e depois sair do terminal atual? Deve deixar o novo ainda funcionando.
xterm -e "bash -c \"./script.sh; exec bash\"" &
EDITAR:
A abordagem abaixo permite que você execute o script da GUI no terminal, selecione o comando para executar, saia do terminal e tenha o comando ainda funcionando. Como exemplo coloquei algum comando em 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
comandoscript.sh:
#!/bin/bash
exec hexdump /dev/urandom | grep --line-buffered -i "ffff f" > random &