Abra una nueva consola desde el script, ejecute el comando y se vuelva interactivo al concluir

Abra una nueva consola desde el script, ejecute el comando y se vuelva interactivo al concluir

Quiero poder obtener un script (ejecutado al inicio) para abrir una konsoleterminal.
Cuando se abre, es para hacer algunas cosas persistentes (como cambiar el directorio y el bashrc de origen) y ejecutar un programa de larga duración.
Si el programa falla o entro <ctrl+c>, es para comenzar a aceptar comandos de entrada estándar (como 'up-enter' para volver a intentarlo, como si fuera interactivo todo el tiempo).

He intentado muchas cosas para que funcione (actualmente solo estoy tratando de hacerlo funcionar lsy volver a ser interactivo al finalizar);

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"

¿Tiene que ver con las comillas? ¿No debería usarlos, debería escapar de algo?
¿Estoy siquiera destinado a intentar ejecutarlo bash?
Me estoy quedando sin ideas, pero espero que sea posible (pero espero que no sea algo vergonzosamente simple que me haya perdido).

Votaré las respuestas que utilizan con éxito otros emuladores de terminal si konsoleel problema es en particular (pero dado que la pregunta es específicamente sobre konsoleno creo que pueda darle el tic jugoso)

Respuesta1

Gracias a los comentarios de @ n.st, hice esta frase:

konsole -e /bin/bash --rcfile <(echo "cd /;ls;echo hi | less")

Que es solo una versión más corta sin archivos tmp, que utiliza la sustitución del proceso bash para lo siguiente;

echo "cd /;ls;echo hi | less" > /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash

Que ejecutará algunos comandos, los mostrará, cambiará el entorno, ejecutará un programa de ejecución prolongada ( less) y cuando finalice ( :q) será interactivo.
Así que reemplace cd /;ls;echo hi | less(la demostración) con su guión.

No hay historial, pero al menos ahora estás en el directorio correcto y tienes las variables de entorno que deseas configurar.


Básicamente lo mismo que mi intento anterior;

konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"

excepto que la escritura del archivo está fuera de la konsoleejecución, quité la -ibandera y los parámetros de ejecución no están en un bloque de comillas


Desafortunadamente, el --rcfilemodificador hace que ~/.bashrcno se carguen esos comandos, por lo que si necesita un alias o algo así, tendrá que hacer esto;

cat ~/.bashrc > /tmp/konsolebash; echo "commands" >> /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash

Lo que simplemente copia tu bashrc entoncesañadetus comandos hasta el final

Respuesta2

Una solución más corta y sencilla:

konsole -e '$SHELL -c "ls; $SHELL"' &

Este tampoco tiene problemas con la historia o el abastecimiento .bashrc. Si su $SHELLvariable de entorno no apunta a bash, puede especificarla manualmente.

Esto genera un segundo shell (bash) dentro de la misma ventana de terminal, por lo que es posible que algunas cosas del primer comando no se transfieran.

Respuesta adaptada de un Askubuntu.respuesta.

información relacionada