Para manter a visão geral, gosto de colocar vários comandos sempre na mesma ordem e iniciá-los automaticamente juntos (gradle, git, database, scala-REPL, jboss ...)
-H (espera) parece significar que o terminal não está fechado após o término, mas como finalizo esse processo voluntariamente? De modo nenhum? De tal maneira que eu possa continuar usando o terminal.
Estou usando o xubuntu com xfce4-terminal e bash. Existe uma solução GUI melhor para inicializar vários comandos, com a capacidade de continuar trabalhando nessa janela / guia?
Atualização: Se você não conhece estes comandos: Jboss e gradle estão produzindo continuamente saída, que você não deseja misturar no mesmo terminal. E, às vezes, eles precisam ser interrompidos com ^ C e reiniciados. Não gosto de reabrir um termo xfce4 e navegar para o diretório em que preciso atuar.
O banco de dados e o scala-REPL são interativos, portanto não faz sentido iniciá-los em segundo plano.
Meu script de inicialização atual apenas navega para os diretórios desejados e abre todas as guias na ordem correta para encontrá-las sempre na mesma posição, nomeando cada guia para sua finalidade:
xfce4-terminal -T eclipse --working-directory=/home/stefan/oximity -e "/opt/eclipse/eclipse" \
--tab -T arandr --working-directory=/home/stefan/oximity -e "arandr /home/stefan/.screenlayout/oximity.sh" \
--tab -T bash --working-directory=/home/stefan/oximity \
--tab -T gradle --working-directory=/home/stefan/oximity/med \
--tab -T git --working-directory=/home/stefan/oximity/med \
--tab -T mysql --working-directory=/opt/mini/mysql \
--tab -T jboss --working-directory=/opt/mini/jboss \
--tab -T jboss-log --working-directory=/opt/mini/jboss/standalone/log \
--tab -T scala-REPL --working-directory=/home/stefan/proj/mini/forum -e /opt/scala/bin/scala
Eclipse e arandr são desanexados do shell e executados em sua própria janela; portanto, o parâmetro -e (execute) funciona. Eu acho que, para o scala-REPL, ele funciona, pois é o último comando da lista.
fonte
xterm -e 'stuff;bash'
?Respostas:
A
-H/-hold
opção é manter a janela do emulador de terminal aberta quando os aplicativos iniciados nela (shell ou outro) forem encerrados. Nesse estado, nada mais pode acontecer.Se você deseja 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 de forma interativa após a saída do aplicativo, com
bash
, você pode fazer uso da$PROMPT_COMMAND
variável de ambiente paraxfce-terminal
iniciar um shell interativo que inicia o comando fornecido logo antes do primeiro prompt.Dessa forma, os comandos são trabalhos desse shell, o que significa que você pode suspendê-los Ctrl-Ze continuar com eles mais tarde
fg/bg
como se os tivesse inserido no prompt desse shell interativo.No entanto, isso pressupõe que você não define o
$PROMPT_COMMAND
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 digitado no prompt do shell, você pode até adicioná-lo à lista de histórico. Gostar:
Dessa forma, depois de sair
vi
, você pode pressionar a Uptecla para recuperar o mesmovi
comando.Uma maneira mais fácil de escrever:
O:
solução, como indicado em outras respostas, funciona, mas tem algumas desvantagens:
cmd
estiver em execução, isso eliminará o externo,sh
pois há apenas um grupo de processos para ambossh
ecmd
.cmd
$PROMPT_COMMAND
abordagem, o status de saída do comando não estará disponível no$?
.Você pode solucionar o problema acima 1 fazendo o seguinte:
Ou:
Com esse último, você também poderá suspender o processo Ctrl-Z, mas não poderá usá
fg/bg
-lo. Você vai ser capaz de continuá-la no fundo embora fazendo umakill -s CONT
na pid decmd
.fonte
bash
scripts, não há histórico, pois não há edição de linha ou interação do usuário, a menos que você o utilizeread -e
(e você verá que issohistory -s text
funciona para preparar o histórico visto por eleread -e
). Aqui, não estamos executando ahistory -s
partir de um script, mas a partir do$PROMPT_COMMAND
gancho de um shell interativo.xfce4-terminal
, pelo menos a versão 0.6.3 agora deseja um parâmetro extra ---disable-server
- para passar pelo ambiente. Ref: lists.debian.org/debian-user/2017/10/msg00045.html .Pelo que entendi sua pergunta, você deseja executar alguns processos em um terminal, podendo Ctrl+ + Ce, depois disso, manter a janela aberta, com o shell.
Se eu estiver certo, isso pode ser realizado com um comando como este:
fonte
vários aplicativos em
xfce4-terminal
guiasAdicionando um shell interativo a cada guia do xfce
Você pode usar esse hack para adicionar um shell se / quando você tiver Ctrl+Cuma guia:
Isso fornecerá o seguinte:
fonte
Ao sair do shell sem
-H
o terminal, também será fechado. Com esta bandeira, o terminal continuará em execução, mas o processo do shell está fechado e não pode ser revivido.Eu acho que você está tentando arquivar que você acabou de iniciar seu terminal e seu ambiente de desenvolvimento é iniciado?
Você pode criar um script de shell e colocar todos os seus comandos dentro dele. No final do script, você apenas inicia seu shell:
Em seguida, chame esse script por
xfce4-terminal -e /the/script
. Ao sair do$SHELL
processo pai (seu script), as tarefas em segundo plano receberão o sinal de saída e também serão encerradas.Se você deseja mantê-los vivos, use, por exemplo,
nohup jboss &
em seu scriptfonte