我在 xterm 中运行一系列命令:(
xterm -sb -bg black -fg white -e "pdflatex --shell-escape -file-line-error-style | && biber | && pdflatex --shell-escape -interaction nonstopmode -file-line-error-style | && pdflatex --shell-escape -interaction nonstopmode -file-line-error-style | && evince |.pdf &"
调用命令时,jEdit 会用文件名填充管道,但这不是 jEdit 的问题)。
如果我用 -hold 调用xterm -hold
它,它会保持打开状态,我必须用鼠标或 Alt+F4 将其关闭。如果我不使用 -hold 调用它,它会继续运行,我看不到最后成功完成的命令是什么。
那么有没有办法:
- 调用 xterm 并设置条件保留或
- 使用命令关闭 xterm当使用 -hold 调用时(输入 exit 会关闭没有使用 -hold 打开的 xterm 窗口,但不会关闭使用 -hold 打开的 xterm 窗口。
答案1
如果可以使用bash
,请尝试这个。set -o pipefail
这是关键 - 它使 bash 退出流水线命令链中的任何命令,并带有退出代码。pipefail
如果链中的任何命令失败,错误状态将始终为零(无论是否发生错误)。
#!/bin/bash
set -o pipefail
xterm -sb -bg black -fg white -e .... # without -hold option
wait $! # wait for exit status of command
if [ $? -ne 0 ];then # $? holds exit status, test if error occurred
read -p "Error - press any key to exit "
fi
exit 0
答案2
我没能使 suspectus 给出的解决方案发挥作用,但是受到该答案的启发,我得到了以下结果:
我现在只是xterm -sb -bg black -fg white -e "~/.jedit/macros/LaTeX/pdflatex.sh |" &
从 jEdit 执行,pdflatex.sh 如下:
pdflatex --shell-escape -file-line-error-style $1
if [ $? -ne 0 ]; then
read -p "Error - press any key to exit "
exit 0
fi
biber $1
if [ $? -ne 0 ]; then
read -p "Error - press any key to exit "
exit 0
fi
pdflatex --shell-escape -file-line-error-style -interaction nonstopmode $1
if [ $? -ne 0 ]; then
read -p "Error - press any key to exit "
exit 0
fi
pdflatex --shell-escape -file-line-error-style -interaction nonstopmode $1
if [ $? -ne 0 ]; then
read -p "Error - press any key to exit "
exit 0
fi
nohup evince $1.pdf &
exit 0