Последовательные Каналы в Команду

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 перед каналом.

6
03.12.2014, 00:33
4 ответа

Вы пытались группировать свои два ответа в одном 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 .

7
27.01.2020, 20:20

Вы также можете использовать документ :

./command.pl <<END
response
y
END
5
27.01.2020, 20:20

Самое простое решение состоит в том, чтобы объединить два эхо-команда.

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)
18
27.01.2020, 20:20

Я помещаю команды в файл, затем набрал файл в команду, и это работало.

Cat Blah.txt | ./command

Когда я вернулся, я заметил ответ USER43791, поэтому приму, что, как ответ, который выглядит то же самое, что я сделал, но более кратко.

4
27.01.2020, 20:20

Теги

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