Abra o novo console a partir do script, executando o comando e tornando-se interativo na conclusão

Abra o novo console a partir do script, executando o comando e tornando-se interativo na conclusão

Quero conseguir um script (executado na inicialização) para abrir um konsoleterminal.
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 lse 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 konsolefor o problema em particular (mas como a pergunta é especificamente sobre, konsolenã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 konsoleexecução, eliminei o -isinalizador e os parâmetros de execução não estão em um bloco de cotação


Infelizmente, a --rcfileopção faz com que você ~/.bashrcnã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 $SHELLvariá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.

informação relacionada