J'ai un exécutable qui démarre un shell interactif. Je voudrais, au lancement du shell, injecter d’abord quelques commandes, puis permettre à l’utilisateur d’avoir sa session interactive. Je peux le faire facilement en utilisant echo
:
echo "command 1\ncommand 2\ncommand3" | ./shell_executable
Cela fonctionne presque . Le problème est que la commande echo qui alimente le stdin du processus frappe EOF une fois que cela est fait, faisant écho à mes commandes. Cela provoque la fin immédiate du shell (comme si vous aviez appuyé sur Ctrl + D dans le shell).
Existe-t-il un moyen d’injecter ces commandes dans stdin sans provoquer un EOF par la suite?
shell-script
pipe
stdin
Jason R
la source
la source
./shell_executable
à la fin de la liste des commandes? Cela pourrait continuer, bien que vous ayez deux instances en cours d'exécution (parent et enfant).Réponses:
Trouvé cette réponse intelligente dans une question similaire à stackoverflow
(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable
Cela fait l'affaire.
cat
va pomper la sortie deecho
dans le flux d’entrée de shell_executable et attendre plus d’entrées jusqu’à EOF.la source
cmd 1
un retour écrit, mais je ne me suis pas rendu compte que cela aurait dû être celui généré parcmd 1
La manière la plus propre de le faire est probablement de chercher quelque chose comme
bash
l'--rcfile
option. Placez vos commandes personnalisées dans votre fichier personnalisé et transmettez-les au shell interactif pour qu'elles s'exécutent au démarrage.Si aucune option de ce type n'existe, vous pouvez également essayer les solutions suivantes:
cat
va interpréter-
comme stdin.la source