Передача даних до stdin процесу, не викликаючи після цього EOF


33

У мене є виконуваний файл, який запускає інтерактивну оболонку користувача. Я хотів би, щоб після запуску оболонки ввести кілька команд спочатку, а потім дозволити користувачеві провести свій інтерактивний сеанс. Я можу це зробити легко, використовуючи echo:

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

Це майже працює. Проблема полягає в тому, що команда echo, яка подає stdin процесу, потрапляє на EOF, коли це робиться, повторюючи мої команди. Цей EOF змушує оболонку негайно закінчуватися (як би ви натиснули Ctrl + D у оболонці).

Чи є спосіб ввести ці команди в stdin, не викликаючи після цього EOF?


Ви намагалися додати ./shell_executableв кінець списку команд? Це може продовжувати роботу, хоча у вас буде два запущені екземпляри (батько та дитина).
goldilocks

Відповіді:


40

Знайшов цю розумну відповідь у подібному питанні на stackoverflow

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

Це робить трюк. catбуде накачувати вихід echoу вхідний потік shell_executable і чекати додаткових входів до EOF.


@ jw013 Ви маєте рацію. Я редагував публікацію. Спасибі. Коли я експериментував без дужок, я побачив cmd 1написане назад, але не зрозумів, що це повинно бути о / р породженеcmd 1
Гоутем

ЦІ РОБОТИ ДУМОВІ! Ти щойно врятував мені тону часу. Дякую!!
jaggedsoft

22

Найчистіше спосіб зробити це, ймовірно , шукати що - щось на зразок bash«S --rcfileваріанту. Помістіть власні команди у свій спеціальний файл та передайте його до інтерактивної оболонки для запуску при запуску.

Якщо такої опції немає, ви також можете спробувати наступне:

cat custom_commands_file - | ./shell_executable

catбуде тлумачити -як stdin.


дуже хороше рішення 💪😠
dctremblay
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.