![如何将粘贴重定向至文件?](https://linux22.com/image/1306643/%E5%A6%82%E4%BD%95%E5%B0%86%E7%B2%98%E8%B4%B4%E9%87%8D%E5%AE%9A%E5%90%91%E8%87%B3%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我从一个 Web 终端复制了一封很长的电子邮件(原始文本)。我可以将其粘贴到终端中,但我想将其提供给sa-learn
。我在想我可以在这里做的一件事就是使用 heredoc。此语法似乎有效。
$ echo <<EOF | sa-learn --spam
<paste email>
EOF
然而,它似乎不起作用......
$ echo <<EOF > foo
AOSJFDOASDFJKOK
EOF
$ cat foo
(nothing)
在 bash 中 heredoc 是如何工作的?
答案1
echo
打印其参数并忽略stdin
。<<EOF ... EOF
(a这里的文件/定界符) 写入stdin
。正如您所注意到的,cat
从 读取stdin
(并将其写出),因此它确实读取了 heredoc。由于sa-learn
从 读取stdin
,它还会读取heredoc
。
答案2
对于任何读过这个问题并且恰好使用 Mac OS X 的人,请查看pbpaste(1)
。它会获取剪贴板上的所有内容(NeXTStep 过去将其称为粘贴板,而 Cocoa API 仍然如此,因此使用“pb”)并将其输出到stdout
。因此在 Mac 上,您可以使用以下方式执行此操作:
pbpaste | sa-learn --spam
另请注意相关的pbcopy(1)
。
答案3
我想知道Ctrl+ X, Ctrl+E是否有帮助。
它允许你快速打开编辑器来编写长命令。似乎还有备择方案。