web-dev-qa-db-fra.com

Les données de la tuyauterie sur le stdin de processus sans causer EOF après

J'ai une exécutable qui commence une coque interactive utilisateur. Je voudrais, lors du lancement de la coquille, injecter quelques commandes d'abord, puis permettez à l'utilisateur d'avoir leur session interactive. Je peux le faire facilement en utilisant echo:

echo "command 1\ncommand 2\ncommand3" | ./Shell_executable

Ceci presque fonctionne. Le problème est que la commande ECHO alimente le processus STDIN HITS EOF une fois que cela a fait écho à mes commandes. Ceci EOF amène que la coque se termine immédiatement (comme Si vous avez appuyé sur Ctrl + D dans la coquille).

Existe-t-il un moyen d'injecter ces commandes dans STDIN sans causer un EOF après?

33
Jason R

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 dans la sortie de echo dans le flux d'entrée de shell_executable et attendez plus d'entrées jusqu'à ce que EOF.

40
Gowtham

Le moyen le plus propre de le faire est probablement de rechercher quelque chose comme bash s --rcfile option. Placez vos commandes personnalisées dans votre fichier personnalisé et transmettez-le à la coquille interactive pour exécuter le démarrage.

Si aucune option de ce type n'existe, vous pouvez également essayer ce qui suit:

cat custom_commands_file - | ./Shell_executable

cat interprétera - comme stdin.

22
jw013