Передайте несколько дословных строк в команду в bash - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь это в GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu):

$ echo <<EOF | cat
> 1
> 2
> 3
> EOF

Я бы ожидал три строки вывода (с 1, 2, 3),но я получаю пустую строку.Что я упускаю (возможно, простая ошибка)?Я знаю, что этот конкретный результат может быть получен более простым способом;пример должен послужить планом для более существенного применения.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

echo не читает со стандартного ввода, но это не нужно.Вы можете вставлять новые строки в строку.

$ echo '1
> 2
> 3' | cat

Вы также можете использовать printf для вывода каждого слова в отдельной строке:

$ printf '%s\n' 1 2 3
1
2
3

Или использовать группу команд для передачивывод нескольких команд в целом, что полезно, если у вас есть что-то более сложное, чем группа простых команд echo, но в качестве примера:

{
  echo 1
  echo 2
  echo 3
} | cat
0 голосов
/ 03 октября 2018

echo не читает со стандартного ввода.Возможно, вы пытаетесь сделать:

$ cat <<EOF | cat
> 1
> 2
> 3
> EOF

Что, конечно, можно сократить до:

$ cat <<EOF
> 1
> 2
> 3
> EOF
...