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