A opção -H/-hold
é manter o emulador de terminal aberto quando os aplicativos iniciados nele (shell ou outro) forem encerrados. Nesse estado, nada mais pode acontecer.
Se você quiser iniciar um comando como um trabalho de um shell interativo no emulador de terminal xfce4-terminal e manter o shell em execução e usá-lo interativamente após o encerramento do aplicativo, com bash
, você poderá fazer uso do Variável de ambiente $PROMPT_COMMAND
, para que xfce-terminal
inicie um shell interativo que inicia o comando fornecido logo antes do primeiro prompt.
xfce4-terminal \
-T eclipse \
--working-directory=/home/stefan/oximity \
-e 'env PROMPT_COMMAND="unset PROMPT_COMMAND; /opt/eclipse/eclipse" bash' \
\
--tab -T arandr \
--working-directory=/home/stefan/oximity \
-e 'env PROMPT_COMMAND="unset PROMPT_COMMAND; arandr /home/stefan/.screenlayout/oximity.sh" bash' \
\
--tab -T bash \
--working-directory=/home/stefan/oximity \
...
Dessa forma, os comandos são jobs desse shell, o que significa que você pode suspendê-los com Ctrl-Z e retomá-los mais tarde com fg/bg
como se tivesse entrado -los no prompt desse shell interativo.
Isso pressupõe que você não defina o $PROMPT_COMMAND
no seu ~/.bashrc
. Observe também que o status de saída do comando não estará disponível em $?
.
Para torná-lo ainda mais parecido com o comando que foi inserido no prompt do shell, você pode até adicioná-lo à lista do histórico. Como:
xfce4-terminal -T /etc/motd -e 'env PROMPT_COMMAND="
unset PROMPT_COMMAND
history -s vi\ /etc/motd
vi /etc/motd" bash'
Dessa forma, uma vez que você sair do vi
, você pode pressionar a tecla Up para recuperar o mesmo comando vi
.
Uma maneira mais fácil de escrever:
PROMPT_COMMAND='unset PROMPT_COMMAND; history -s "$CMD"; eval "$CMD"' \
xfce4-terminal --disable-server \
-T /etc/motd -e 'env CMD="vi /etc/motd" bash' \
--tab -T top -e 'env CMD=top bash'
O:
xfce4-terminal -e 'sh -c "cmd; exec bash"'
A solução dada em outras respostas funciona, mas tem algumas desvantagens:
- Se você pressionar Ctrl-C enquanto
cmd
estiver em execução, isso eliminará o% externosh
, pois há apenas um grupo de processos parash
ecmd
. - Você não pode usar Ctrl-Z para suspender
cmd
- Como na abordagem
$PROMPT_COMMAND
, o status de saída do comando não estará disponível em$?
.
Você pode contornar 1 acima fazendo:
xfce4-terminal -e 'sh -c "trap : INT; cmd; exec bash"'
Ou:
xfce4-terminal -e 'sh -ic "cmd; exec bash"'
Com este último, você também poderá suspender o processo com Ctrl-Z , mas não poderá usar fg/bg
nele. Você poderá continuar em segundo plano fazendo um kill -s CONT
no pid de cmd
.