Передача данных в stdin процесса без возникновения EOF впоследствии

У меня есть исполняемый файл, который запускает пользовательскую интерактивную оболочку. Я бы хотел, чтобы после запуска оболочки сначала вставлять несколько команд, а затем разрешать пользователю выполнять их интерактивный сеанс. Я могу сделать это легко, используя echo:

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

Этот почти работает. Проблема в том, что команда echo, которая кормит stdin этого процесса, попадает в EOF, когда это выполняется, повторяя мои команды. Этот EOF вызывает немедленное завершение оболочки (как если бы вы нажали Ctrl + D в оболочке).

Есть ли способ вставить эти команды в stdin, не вызывая при этом EOF?

28 голосов | спросил Jason R 5 ThuEurope/Moscow2013-12-05T21:14:46+04:00Europe/Moscow12bEurope/MoscowThu, 05 Dec 2013 21:14:46 +0400 2013, 21:14:46

2 ответа


34

Нашел этот умный ответ по аналогичному вопросу в StackOverflow

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

Это трюк. cat будет выкачать вывод echo во входной поток shell_executable и ждать большего количества входов до EOF.

ответил Gowtham 5 ThuEurope/Moscow2013-12-05T22:17:54+04:00Europe/Moscow12bEurope/MoscowThu, 05 Dec 2013 22:17:54 +0400 2013, 22:17:54
17

Самый чистый способ сделать это - это, вероятно, найти что-то вроде bash '--rcfile. Поместите свои пользовательские команды в свой файл и передайте их в интерактивную оболочку для запуска при запуске.

Если такой опции нет, вы также можете попробовать следующее:

cat custom_commands_file - | ./shell_executable

cat будет интерпретировать - как STDIN.

ответил jw013 5 ThuEurope/Moscow2013-12-05T22:10:47+04:00Europe/Moscow12bEurope/MoscowThu, 05 Dec 2013 22:10:47 +0400 2013, 22:10:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132