Tengo un ejecutable que inicia un shell interactivo para el usuario. Al iniciar el shell, me gustaría inyectar algunos comandos primero y luego permitir que el usuario tenga su sesión interactiva. Puedo hacer esto fácilmente usando echo
:
echo "command 1\ncommand 2\ncommand3" | ./shell_executable
Esto casi funciona. El problema es que el comando echo que está alimentando el stdin del proceso golpea EOF una vez que se hace eco de mis comandos. Este EOF hace que el shell termine inmediatamente (como si hubiera presionado Ctrl + D en el shell).
¿Hay alguna manera de inyectar estos comandos en stdin sin causar un EOF después?
shell-script
pipe
stdin
Jason R
fuente
fuente
./shell_executable
al final de la lista de comandos? Eso podría seguir funcionando, aunque tendrá dos instancias en ejecución (padre e hijo).Respuestas:
Encontré esta respuesta inteligente en una pregunta similar en stackoverflow
(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable
Esto hace el truco.
cat
bombeará la salidaecho
a la secuencia de entrada de shell_executable y esperará más entradas hasta EOF.fuente
cmd 1
escrito de nuevo pero no me di cuenta de que debería haber sido el o / p generado porcmd 1
La forma más limpia de hacer esto es probablemente buscar algo como
bash
la--rcfile
opción. Coloque sus comandos personalizados en su archivo personalizado y páselo al shell interactivo para que se ejecute al inicio.Si no existe tal opción, también puede intentar lo siguiente:
cat
interpretará-
como stdin.fuente