
Quiero poder obtener un script (ejecutado al inicio) para abrir una konsole
terminal.
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 ls
y 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 konsole
el problema es en particular (pero dado que la pregunta es específicamente sobre konsole
no 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 konsole
ejecución, quité la -i
bandera y los parámetros de ejecución no están en un bloque de comillas
Desafortunadamente, el --rcfile
modificador hace que ~/.bashrc
no 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 $SHELL
variable 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.