Piping dei dati sullo stdin di un processo senza causare EOF in seguito


33

Ho un eseguibile che avvia una shell interattiva per l'utente. Vorrei, al lancio della shell, immettere prima alcuni comandi, quindi consentire all'utente di avere una sessione interattiva. Posso farlo facilmente usando echo:

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

Questo funziona quasi . Il problema è che il comando echo che sta alimentando lo stdin del processo colpisce EOF una volta che ha fatto eco ai miei comandi. Questo EOF fa terminare immediatamente la shell (come se avessi premuto Ctrl + D nella shell).

C'è un modo per iniettare questi comandi nello stdin senza causare in seguito un EOF?


Hai provato ad aggiungere ./shell_executablealla fine dell'elenco dei comandi? Ciò potrebbe continuare, anche se avrai due istanze in esecuzione (padre e figlio).
Riccioli d'oro

Risposte:


40

Ho trovato questa risposta intelligente in una domanda simile su StackOverflow

(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable

Questo fa il trucco. catinvierà l'output del echoflusso di input di shell_executable e attenderà altri input fino a EOF.


@ jw013 Hai ragione. Ho modificato il post. Grazie. Quando ho sperimentato senza le parentesi, ho visto cmd 1cmd 1
riscritto

QUESTO FUNZIONA FANTASTICO! Mi hai risparmiato un sacco di tempo. Grazie!!
jaggedsoft,

22

Il modo più pulito per fare questo è probabilmente alla ricerca di qualcosa di simile a bash's --rcfileopzione. Inserisci i tuoi comandi personalizzati nel tuo file personalizzato e passalo alla shell interattiva per eseguirlo all'avvio.

Se tale opzione non esiste, puoi anche provare quanto segue:

cat custom_commands_file - | ./shell_executable

catinterpreterà -come stdin.


soluzione molto buona 💪😠
dctremblay
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.