0

我正在尝试使用“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

这样做的正确方法是什么?

4

1 回答 1

2

我没有尝试这个,因为我不想安装entr. 但我认为以下应该有效:

echo "$1" | entr sh -c "refer references.bib $1 | groff -ms $1 -T pdf > $2"

请注意,我们refer | groff在 shell 中运行管道以将其组合在一起。没有外壳的问题中的命令refer在文件更改时运行,但groff只运行一次。部分不是由 执行entr ... | groff,而是由并行执行。groffentrbash

此命令仅在$1且不$2包含空格*、 或等特殊符号时才有效$。处理这些论点的正确方法是......

echo "$1" | entr sh -c 'refer references.bib "$1" | groff -ms "$1" -T pdf > "$2"' . "$1" "$2"
于 2021-06-02T16:16:27.530 回答