escaped_env() { cat /proc/self/environ | while IFS== read -r -d '' name value do printf '%s=%q\n' "$name" "$value" done }
Сессия в качестве примера:
$ export foo=$'a\nbar=\baz' $ escaped_env | grep foo foo=$'a\nbar=\baz'
Это работает, но только для
export
переменные редактора, иset
кажется, не имеет ␀ - опция разделителя.К вашему сведению/proc файловая система не является функцией POSIX.1-2008, и она похожа только на реализации Linux
/proc/self/environ
. Если Ваша ОС не имеет этого файла, можно хотеть использоватьenv --null
перед каналом.
Вы пытались группировать свои два ответа в одном Echo
, разделенные новой линией?
echo -e "response\ny" | ./command.pl
Примечание. Флаг -E
необходимо с помощью Bash
Включить интерпретацию скидок обратной площади (если только Bash
находится в режиме соответствия Unix).
или более портативно:
echo 'response
y' | ./command.pl
или:
printf 'response\ny\n' | ./command.pl
или:
printf '%s\n' response y | ./command.pl
Редактировать:
Я забыл упомянуть, но проблема с вашей исходной командой было то, что Echo
не принимает любой вход через его stdin. Выход команды ECHO «Y»
никогда не достигнут ./ Command.pl
.
Самое простое решение состоит в том, чтобы объединить два эхо-команда.
echo $'y\nresponse' | ./command.pl
Написание строки с одним кавычками и $
на фронте рассказывает BASH для интерпретации последовательностей Escape, как \ N
.
Если команды, которые вы были трубопроводными, были более сложными, вы можете группировать их с фигурными брекетами.
{ echo y; echo response; } | ./command.pl
скобки также будут работать, хотя они создали ненужную дополнительную подколочку (незначительная неэффективность).
(echo y; echo response) | ./command.pl
Другой вариант - замена процесса.
./command.pl < <(echo y; echo response)
Я помещаю команды в файл, затем набрал файл в команду, и это работало.
Cat Blah.txt | ./command
Когда я вернулся, я заметил ответ USER43791, поэтому приму, что, как ответ, который выглядит то же самое, что я сделал, но более кратко.