有时我需要编写文本,然后将其通过管道传递到另一个命令中。我通常的工作流程如下:
vim
# I edit and save my file as file.txt
cat file.txt | pandoc -o file.pdf # pandoc is an example
rm file.txt
我觉得这很麻烦,并试图学习bash脚本,我想通过编写一个命令来触发该操作,从而简化该过程,该命令将打开编辑器,当编辑器关闭时,将编辑器的输出发送到stdout。这样我就可以将命令运行为quickedit | pandoc -o file.pdf
。
我不确定这将如何工作。我已经编写了一个函数,可以按照上面的确切工作流程以及一些附加操作来自动执行此操作。它生成一个随机字符串作为文件名,并在调用函数时将其传递给vim。当用户通过保存文件退出vim时,该函数将文件打印到控制台,然后删除该文件。
function quickedit {
filename="$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32)"
vim $filename
cat $filename
rm $filename
}
# The problem:
# => Vim: Warning: Output is not to a terminal
我很快遇到的问题是,当我执行诸如quickedit | command
vim之类的操作时,由于所有输出都被限制在管道中,因此本身不能用作编辑器。
我想知道是否有任何解决方法,以便可以通过管道输出quickedit
函数的输出。次优的选择是启动一个单独的编辑器,例如sublime text,但是我真的想留在终端中。
:w !pandoc -o file.pdf
?(注:之间的空间w
和!
是必不可少的。)