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?
shell-script
pipe
stdin
Jason R.
źródło
źródło
./shell_executable
na końcu listy poleceń? To może dalej działać, chociaż będziesz mieć dwie działające instancje (rodzic i dziecko).Odpowiedzi:
Znalazłem tę sprytną odpowiedź w podobnym pytaniu podczas stackoverflow
(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable
To załatwia sprawę. wpompuje
cat
wyjścieecho
do strumienia wejściowego shell_executable i zaczeka na więcej danych wejściowych do EOF.źródło
cmd 1
cmd 1
Najczystszym sposobem, aby to zrobić, to prawdopodobnie szukać czegoś podobnego
bash
„s--rcfile
opcja. 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
będzie interpretować-
jako standardowe.źródło