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_executableal 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_executableEsto hace el truco.
catbombeará la salidaechoa la secuencia de entrada de shell_executable y esperará más entradas hasta EOF.fuente
cmd 1escrito de nuevo pero no me di cuenta de que debería haber sido el o / p generado porcmd 1La forma más limpia de hacer esto es probablemente buscar algo como
bashla--rcfileopció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:
catinterpretará-como stdin.fuente