En lugar de reformular mi pregunta, permítame describirle el caso de usuario deseado:
Creo un script de shell corto para ejecutar el comando "gnome-terminal --someoptionflagname 'mi texto que se publicará'", y ejecuto este script.
Aparece el terminal Gnome, con la línea de comandos seguida de mi texto.
es decir: fields@mycomputer:/$ my text to be posted
Se puede hacer esto?
xnee
ahora.Respuestas:
Puede hacer esto con esperar ( instalar ). Crear y hacer ejecutable
~/bin/myprompt
:y ejecute Gnome Terminal con:
fuente
Si entiendo correctamente, desea que su primera línea de entrada se complete previamente con el contenido que pasa en la línea de comando gnome-terminal.
No sé cómo hacer exactamente esto con bash, pero aquí hay algo que se acerca. En su
~/.bashrc
, agregue la siguiente línea al final:Ejecute
gnome-terminal -x env BASH_INITIAL_COMMAND='my text to be posted' bash
y presione Upen el indicador para recuperar el texto.Tenga en cuenta también que si coloca
set -o history
comentarios seguidos al final de su.bashrc
, se ingresarán en el historial cuando comience bash, por lo que puede usarlos como base para la edición al alcanzarlos con la Uptecla y eliminar la inicial#
.fuente
La sugerencia de ændrük es muy buena y funcionó para mí, sin embargo, el comando está codificado dentro del script, y si cambia el tamaño de la ventana de terminal no funciona bien. Usando su código como base, agregué la capacidad de enviar el comando myprompt al comando como argumento, y este script maneja correctamente el cambio de tamaño de la ventana del terminal.
y ejecute Gnome Terminal con:
fuente
La respuesta de ændrük está bien, pero quizás sea un poco pesada para la tarea.
Aquí hay un guión que escribe un guión basado en sus argumentos
Si no has hecho mucha programación de shell, parece que hay más magia aquí que la que hay. Primero, nombro un archivo temporal para contener el script donde
$$
está el ID del proceso del shell que ejecuta este script. La/tmp/something.$$
metáfora se usa en caso de que dos instancias de este script se ejecuten al mismo tiempo, no intentarán usar el mismo archivo temporal.La variable
$SHELL
se establece con el nombre del shell que ejecuta el script. Si usa / usr / bin / bash, presumiblemente le gustaría que el mini script también lo use.El
"$@"
es un idioma de shell para "interpolar todos mis argumentos, citándolos si es necesario". Esta peculiar sintaxis provocainterpolar los argumentos como dos elementos
en lugar de los cuatro que
$@
produciríanLas últimas líneas del script arreglan para que un terminal gnome comience a ejecutar el mini script y luego inicie un shell interactivo. Cuando el terminal gnome se cierra, el script temporal se elimina porque la basura no está fresca.
La última línea no es parte del mini script, demuestra que el mini script funciona. Si el script de 11 líneas anterior está en un archivo llamado,
rt.sh
entonces lochmod
hace ejecutable y luego se ejecuta.El resultado de todo esto será un terminal de gnomo que se inicia, muestra
en su primera línea y luego inicia un shell interactivo:
fuente
gnome-terminal -x sh -c "echo hello world; bash"
, lo que no creo que se haga la pregunta.Las dos respuestas me han gustado mejor para solucionar este están utilizando
expect
y éste en el que recomiendan el uso de la--init-file
bandera, ya sea en el tinglado o al ejecutar el terminal:... y ejecutarlo como:
expect
es probablemente la mejor solución (por las razones que describiré), excepto que no puedo controlar si está instalado en mi entorno de destino.El problema que encontré con bash
--init-file
ygnome-terminal
's--command
como truco para resolver esto es que el shell no tiene acceso a STDIN mientras ejecuta scripts de inicio. Si, por ejemplo, quiero ejecutar algo que requiera la entrada del usuario (ftp, telnet, etc.) pero deje el shell principal ejecutándose después, no funcionará; La única excepción que he visto hasta ahora es ssh:... pero lo que necesito es más complicado que este ejemplo de juguete. De todos modos, espero que las
--init-file
cosas sean útiles para cualquiera que lea esta pregunta.fuente
Puede usar los argumentos
-e
o-x
para ejecutar un comando dentro de un terminal emergente, pero eso no es exactamente lo que desea.fuente