
Quero conseguir um script (executado na inicialização) para abrir um konsole
terminal.
Quando ele abre, é necessário fazer algumas coisas persistentes (como alterar o diretório e o bashrc de origem) e executar um programa de longa execução.
Se o programa travar ou eu entrar e <ctrl+c>
ele, é para começar a aceitar comandos da entrada padrão (como 'up-enter' para tentar novamente, como se fosse interativo o tempo todo).
Eu tentei muitas coisas para fazê-lo funcionar (atualmente estou apenas tentando fazê-lo ls
e voltar a ser interativo após a conclusão);
konsole -e ls
konsole --hold ls
konsole -e /bin/bash -c ls
konsole --hold -e "/bin/bash -c ls"
konsole -e "/bin/bash -i -c ls"
konsole -e /bin/bash -i -c ls
konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"
echo ls > /tmp/konsolebash
konsole -e "/bin/bash -i --rcfile /tmp/konsolebash"
Tem a ver com as aspas? Eu não deveria usá-los, deveria estar escapando de alguma coisa?
Devo tentar executar bash
?
Estou ficando sem ideias, mas espero que seja viável (mas espero que não seja algo embaraçosamente simples que eu tenha perdido).
Vou votar positivamente nas respostas que usam com sucesso outros emuladores de terminal, se konsole
for o problema em particular (mas como a pergunta é especificamente sobre, konsole
não acho que posso lhe dar uma avaliação interessante)
Responder1
Graças aos comentários de @n.st, fiz este forro:
konsole -e /bin/bash --rcfile <(echo "cd /;ls;echo hi | less")
Que é apenas uma versão mais curta sem tmpfiles, usando a substituição do processo bash para o seguinte;
echo "cd /;ls;echo hi | less" > /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash
Que irá executar alguns comandos, exibi-los, alterar o ambiente, executar um programa de longa execução ( less
) e quando terminar ( :q
) será interativo.
Portanto, substitua cd /;ls;echo hi | less
(a demonstração) pelo seu script.
Sem histórico, mas pelo menos você está no diretório correto agora e tem todas as variáveis de ambiente que deseja configurar.
Basicamente igual à minha tentativa anterior;
konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"
exceto que a gravação do arquivo está fora da konsole
execução, eliminei o -i
sinalizador e os parâmetros de execução não estão em um bloco de cotação
Infelizmente, a --rcfile
opção faz com que você ~/.bashrc
não seja carregado para esses comandos; portanto, se você precisar de um alias ou algo assim, terá que fazer isso;
cat ~/.bashrc > /tmp/konsolebash; echo "commands" >> /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash
O que apenas copia seu bashrc entãoacrescentaseus comandos até o fim
Responder2
Uma solução mais curta e simples:
konsole -e '$SHELL -c "ls; $SHELL"' &
Este também não tem problemas com história ou origem .bashrc
. Se a sua $SHELL
variável de ambiente não apontar para o bash, você poderá especificá-la manualmente.
Isso gera um segundo shell (bash) dentro da mesma janela do terminal, portanto, algumas coisas do primeiro comando podem não ser transferidas.
Resposta adaptada de um askubunturesponder.