![¿Cómo puedo ejecutar un comando y salir inmediatamente de la terminal?](https://rvso.com/image/1413931/%C2%BFC%C3%B3mo%20puedo%20ejecutar%20un%20comando%20y%20salir%20inmediatamente%20de%20la%20terminal%3F.png)
Debería quedar bastante claro lo que estoy intentando hacer:
guión original.sh:
select blah in foo bar oof rab
do
cmd $blah
break
done
Cosas bastante básicas. El problema surge cuando intento lo siguiente:
> xterm -e 'script.sh'
script.sh funciona bien cuando se llama desde un shell. Pero cuando intento llamarlo desde fvwm, no veo resultados de " cmd $blah
". Probar la siguiente modificación no me sirve de nada:
select blah in foo bar oof rab
do
nohup cmd $blah > /dev/null 2>&1 &
break
done
¿Cómo puedo lograr la funcionalidad deseada? (Es decir, ¿cómo puedo hacer que un xterm aparezca el tiempo suficiente para hacer una selección y luego suprimirse mientras se ejecuta un comando en segundo plano?)
Respuesta1
Puede agregar como última línea de su secuencia de comandos unespera PIDLa instrucción con el PID
comando en segundo plano que le interesa finalizará. Por supuesto, debes almacenar eso PID
en tu 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:
- esperar es un comando incorporado del shell.Espera a que se complete cada proceso especificado y devuelva su estado de terminación. Puedes consultar estoayuda.
Respuesta2
¿Le convendrá si lo ejecuta en una nueva xterm
sesión y luego sale de su terminal actual? Debería dejar el nuevo funcionando.
xterm -e "bash -c \"./script.sh; exec bash\"" &
EDITAR:
El siguiente enfoque le permite ejecutar un script desde la GUI en la terminal, seleccionar el comando para ejecutar, salir de la terminal y hacer que el comando siga funcionando. Como ejemplo puse algún comando en commandscript.sh
seleccionarscript.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 &