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


1

我正在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问题)。

如果我打电话给它xterm -hold保持打开状态,我必须用鼠标或Alt + F4关闭它。如果我在没有-hold的情况下调用它,那么我无法看到成功完成的最后一个命令是什么。

那么有没有办法:

  1. 用条件保持或调用xterm
  2. 用-hold调用它时用一个命令关闭xterm (键入exit关闭一个没有-hold打开的xterm窗口,但是没有用-hold打开的窗口。

你必须在后台运行它吗?
怀疑期间2014年

@suspectus我是这么认为 - 这一个jEdit问题 - 如果我不这样做我就不能使用jEdit,这意味着当pdflatex抛出错误时我可以切换到正确的文件或转到右边看看它错误消息仍然是。
克里斯H

Answers:


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

我无法让它工作 - 它似乎忽略了pipefail,但我怀疑这是我与脚本与jEdit。受到你的回答的启发,我想出了一些有用的东西,我将其作为格式的答案发布,因为它的评论太长了。
克里斯H

好的 - 我期待着找到你是如何解决它的。
怀疑期2014年

我在每个编译步骤后通过复制粘贴错误陷阱来欺骗,其余的只是为了适应jEdit。
克里斯H

1

我没有得到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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.