xterm 相当于 -hold,但仅当进程以退出代码 >0 终止时才有效

xterm 相当于 -hold,但仅当进程以退出代码 >0 终止时才有效

我在 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 调用它,它会继续运行,我看不到最后成功完成的命令是什么。

那么有没有办法:

  1. 调用 xterm 并设置条件保留或
  2. 使用命令关闭 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

相关内容