3

Я скопировал большое электронное письмо (необработанный текст) с одного веб-терминала. Я могу вставить это в терминал, но я хочу скормить его в sa-learn . Я думал, что одна вещь, которую я мог бы сделать здесь, это использовать heredoc. Этот синтаксис работает.

$ echo <<EOF | sa-learn --spam
<paste email>
EOF

Тем не менее, это не похоже на работу ...

$ echo <<EOF > foo
AOSJFDOASDFJKOK
EOF

$ cat foo
(nothing)

Как работает heredoc в bash?

3 ответа3

4

Для тех, кто читает этот вопрос и использует Mac OS X, посмотрите pbpaste(1) . Он берет все, что есть в вашем буфере обмена (NeXTStep использовал для вызова этого монтажного стола, а API-интерфейсы Какао все еще делают, следовательно, "pb") и выводит его в стандартный stdout . Итак, на Mac вы можете сделать это с:

pbpaste | sa-learn --spam

Обратите внимание также на связанный pbcopy(1) .

3

echo печатает свои аргументы и игнорирует стандартный stdin . <<EOF ... EOF (здесь документ / heredoc) пишет в стандартный stdin . Как вы заметили, cat читает со стандартного stdin (и записывает его), поэтому читает heredoc. Когда sa-learn читает из stdin , он также читает heredoc .

1

Интересно, помогут ли здесь Ctrl+X, Ctrl+E ?

Это позволяет быстро открыть редактор, чтобы написать длинную команду. Там также, кажется, есть альтернативы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .