Передача данных в stdin процесса без возникновения EOF впоследствии
У меня есть исполняемый файл, который запускает пользовательскую интерактивную оболочку. Я бы хотел, чтобы после запуска оболочки сначала вставлять несколько команд, а затем разрешать пользователю выполнять их интерактивный сеанс. Я могу сделать это легко, используя echo
:
echo "command 1\ncommand 2\ncommand3" | ./shell_executable
Этот почти работает. Проблема в том, что команда echo, которая кормит stdin этого процесса, попадает в EOF, когда это выполняется, повторяя мои команды. Этот EOF вызывает немедленное завершение оболочки (как если бы вы нажали Ctrl + D в оболочке).
Есть ли способ вставить эти команды в stdin, не вызывая при этом EOF?
2 ответа
Нашел этот умный ответ по аналогичному вопросу в StackOverflow
(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable
Это трюк. cat
будет выкачать вывод echo
во входной поток shell_executable и ждать большего количества входов до EOF.
Самый чистый способ сделать это - это, вероятно, найти что-то вроде bash
'--rcfile
. Поместите свои пользовательские команды в свой файл и передайте их в интерактивную оболочку для запуска при запуске.
Если такой опции нет, вы также можете попробовать следующее:
cat custom_commands_file - | ./shell_executable
cat
будет интерпретировать -
как STDIN.