Przesyłanie danych do standardowego wejścia procesu bez powodowania EOF później


33

Mam plik wykonywalny, który uruchamia powłokę interaktywną dla użytkownika. Chciałbym, po uruchomieniu powłoki, najpierw wstrzyknąć kilka poleceń, a następnie pozwolić użytkownikowi na interaktywną sesję. Mogę to łatwo zrobić za pomocą echo:

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

To prawie działa. Problem polega na tym, że polecenie echa, które zasila standardowe wejście procesu, trafia w EOF, gdy zakończy wykonywanie echa moich poleceń. Ten EOF powoduje natychmiastowe zakończenie powłoki (tak jakbyś nacisnął Ctrl + D w powłoce).

Czy istnieje sposób na wstrzyknięcie tych poleceń do standardowego wejścia bez powodowania EOF?


Czy próbowałeś dodać ./shell_executablena końcu listy poleceń? To może dalej działać, chociaż będziesz mieć dwie działające instancje (rodzic i dziecko).
goldilocks,

Odpowiedzi:


40

Znalazłem tę sprytną odpowiedź w podobnym pytaniu podczas stackoverflow

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

To załatwia sprawę. wpompuje catwyjście echodo strumienia wejściowego shell_executable i zaczeka na więcej danych wejściowych do EOF.


@ jw013 Masz rację. Zredagowałem post. Dzięki. Kiedy eksperymentowałem bez nawiasów, zobaczyłem cmd 1cmd 1
odpisany,

TO DZIAŁA NIESAMOWITE! Właśnie zaoszczędziłeś mi mnóstwo czasu. Dziękuję Ci!!
jaggedsoft,

22

Najczystszym sposobem, aby to zrobić, to prawdopodobnie szukać czegoś podobnego bash„s --rcfileopcja. Umieść swoje niestandardowe polecenia w niestandardowym pliku i przekaż je interaktywnej powłoce, aby uruchomić podczas uruchamiania.

Jeśli nie ma takiej opcji, możesz spróbować:

cat custom_commands_file - | ./shell_executable

catbędzie interpretować -jako standardowe.


bardzo dobre rozwiązanie 💪😠
dctremblay
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.