我正在尝试使用“entr”命令来自动编译 Groff 文档。
我希望运行以下行:
refer references.bib $1 | groff -ms $1 -T pdf > $2
遗憾的是,如果我尝试这样做,它只会编译一次:
echo $1 | entr refer references.bib $1 | groff -ms $1 -T pdf > $2
我也尝试了以下方法,但它创建了一个无法用 Ctrl+C 退出的无限循环:
compile(){
refer references.bib $1 | groff -ms $1 -T pdf > $2
}
while true; do
compile $1 $2
echo $1 | entr -pd -s 'kill $PPID'
done
这样做的正确方法是什么?
答案 0 :(得分:2)
我没有尝试这个,因为我不想安装 entr
。但我认为以下应该有效:
echo "$1" | entr sh -c "refer references.bib $1 | groff -ms $1 -T pdf > $2"
请注意,我们在 shell 中运行管道 refer | groff
以将其组合在一起。没有 shell 的问题中的命令在文件更改时运行 refer
,但 groff
仅运行一次。在 entr ... | groff
中,groff
部分不是由 entr
执行,而是由 bash
并行执行。
此命令仅在 $1
和 $2
不包含空格、*
或 $
等特殊符号时有效。处理这些参数的正确方法是......
echo "$1" | entr sh -c 'refer references.bib "$1" | groff -ms "$1" -T pdf > "$2"' . "$1" "$2"