![我可以使用 emacs 将 stdout 通过管道传输到命令的中间吗?](https://linux22.com/image/156892/%E6%88%91%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20emacs%20%E5%B0%86%20stdout%20%E9%80%9A%E8%BF%87%E7%AE%A1%E9%81%93%E4%BC%A0%E8%BE%93%E5%88%B0%E5%91%BD%E4%BB%A4%E7%9A%84%E4%B8%AD%E9%97%B4%E5%90%97%EF%BC%9F.png)
命令
emacs -nw foo -f org-mode
foo
打开中emacs
的文件org-mode
。
现在,假设文件名foo
是脚本的输出。我怎样才能通过管道传输我的命令?
所以,我想得到类似的东西
echo foo | emacs -nw {GET OUTPUT HERE} -f org-mode
上班。这可能吗?
编辑:此问题已被投票关闭,但引用的答案不起作用,并且未经投票关闭的用户测试。
答案1
简单地使用一个子shell怎么样(如评论中所建议的):
emacs -nw $(<COMMAND GOES HERE>) -f org-mode
例如
emacs -nw $(echo foo) -f org-mode
将在组织模式下打开“foo”
答案2
使用 aread
从管道获取文件名,然后将其作为变量传递给您的命令。
例如,使用 shell 函数(可能不是最好的名称,也许你可以想到更好的名字):
emacspipe () {
local filename
read filename
emacs -nw "$filename" -f org-mode
}
然后你可以使用:
$ echo foo | emacspipe
$(...)
但是像其他答案所暗示的那样使用命令替换绝对是完成相同任务的更合适的方法。如果您有一个可以通过管道传递给某些内容的命令,您可以轻松地在块中运行它$(...)
,并将生成的文件名作为参数传递给启动 emacs 的脚本或函数...