Parece que o principal problema que tive foi que, para a maioria dos emuladores de terminal, espera-se que o argumento de comando seja um único item (ou seja, não há análise de estilo de shell). Por exemplo
rxvt -e "ls; sleep 3"
falha, mesmo que seja da mesma forma que xterm
foi invocado.
Se você tentar fechar a cota, isso também não funcionará. Por exemplo:
rxvt -e ls; sleep 3
é analisado e executado separadamente, como dois comandos:
rxvt -e ls
sleep 3
Usando um truque eu encontrei aqui , você pode chamar o emulador de terminal para executar bash
e, em seguida, passar comandos para o interpretador bash
em vez do do emulador. Isso resolve o problema e tem um comportamento mais consistente, já que em todos os casos é bash
que está analisando a string de comando principal.
Usando um truque que encontrei aqui , você pode invocar bash
para xterm
, deixando uma concha aberta e, assim, produzir a variante persistente:
rxvt -e bash -c "ls;sleep 3;bash"
Isso funciona para konsole
, lxterminal
e terminator
também ( terminator
também suporta -x
). No entanto, se você pensar nisso (ou usar gnome-terminal
do equivalente em -x
e observar o aviso ao tentar fechar a janela), perceberá que o terminal está executando bash
e que bash
está executando bash
. Em vez disso, você quer substituir o bash
-que vai terminar com bash
-that-will:
rxvt -e bash -c "ls;sleep 3;exec bash"
Isso pode ser visto no site aqui .
Nota uma alternativa é a opção xterm
-hold
, que tem equivalentes em alguns outros terminais (por exemplo, konsole
--hold
). A opção hold impede que o emulador de terminal feche, mas não retorna a interatividade. Isso não era exatamente o que eu estava procurando, mas eu listei abaixo para completar.
Aqui está a tabela (formato diferente, uma vez que esses comandos estão ficando mais longos). Eu também adicionei urxvt
. Todas as invocações foram testadas:
Emulator | Command Type | Invocation
---------------+---------------------+-------------------------------------------------
cmd | exiting | start CMD /C "DATE /T & TIME /T"
| persistent | ???
| persistent (inter.) | start CMD /K "DATE /T & TIME /T"
---------------+---------------------+-------------------------------------------------
gnome-terminal | exiting | gnome-terminal -x bash -c "ls;sleep 3"
| persistent | ???
| persistent (inter.) | gnome-terminal -x bash -c "ls;sleep 3;exec bash"
---------------+---------------------+-------------------------------------------------
konsole | exiting | konsole -e bash -c "ls;sleep 3"
| persistent | konsole --hold -e bash -c "ls;sleep 3"
| persistent (inter.) | konsole -e bash -c "ls;sleep 3;exec bash"
---------------+---------------------+-------------------------------------------------
lxterminal | exiting | lxterminal -e bash -c "ls;sleep 3"
| persistent | ???
| persistent (inter.) | lxterminal -e bash -c "ls;sleep 3;exec bash"
---------------+---------------------+-------------------------------------------------
rxvt | exiting | rxvt -e bash -c "ls;sleep 3"
| persistent | ???
| persistent (inter.) | rxvt -e bash -c "ls;sleep 3;exec bash"
---------------+---------------------+-------------------------------------------------
terminator | exiting | terminator -x bash -c "ls;sleep 3"
| persistent | ???
| persistent (inter.) | terminator -x bash -c "ls;sleep 3;exec bash"
---------------+---------------------+-------------------------------------------------
urxvt | exiting | urxvt -e bash -c "ls;sleep 3"
| persistent | urxvt -hold -e bash -c "ls;sleep 3"
| persistent (inter.) | urxvt -e bash -c "ls;sleep 3;exec bash"
---------------+---------------------+-------------------------------------------------
xfce4-terminal | exiting | xfce4-terminal -x bash -c "ls;sleep 3"
| persistent | xfce4-terminal --hold -x bash -c "ls;sleep 3"
| persistent (inter.) | xfce4-terminal -x bash -c "ls;sleep 3;exec bash"
---------------+---------------------+-------------------------------------------------
xterm | exiting | xterm -e "ls;sleep 3"
| persistent | xterm -hold -e "ls; sleep 3"
| persistent (inter.) | xterm -e "ls;sleep 3;exec bash"
Os pontos de interrogação restantes não são possíveis.
Sinta-se à vontade para editar esta tabela com novos terminais, novas invocações ou correções.