xterm equivalente a -hold mas somente se o processo for finalizado com o código de saída 0

1

Estou executando uma sequência de comandos no 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 &" (os canais são preenchidos com um nome de arquivo por jEdit quando o comando é chamado, mas não é um problema do jEdit).

Se eu chamar com xterm -hold , ele ficará aberto e eu tenho que fechá-lo com o mouse ou com Alt + F4. Se eu chamo isso sem guardar, não consigo ver qual foi o último comando a terminar com sucesso.

Então, há uma maneira de:

  1. chame o xterm com uma retenção condicional ou
  2. fecha xterm com um comando quando foi chamado com -hold (a saída de digitação fecha uma janela xterm que foi aberta sem -hold, mas não uma que tenha sido aberta com -hold.
por Chris H 21.01.2014 / 17:47

2 respostas

1

Se você puder usar bash , tente isso. set -o pipefail é a chave aqui - faz com que o bash saia de qualquer comando em uma cadeia de comandos com pipeline com um código de saída. Com pipefail se algum comando na cadeia falhar, o status do erro será sempre zero (independentemente de um erro ter ocorrido ou não).

#!/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
    
por 22.01.2014 / 12:44
1

Não consegui que a solução dada pelo suspectus funcionasse, mas, inspirada por essa resposta, consegui que o seguinte funcionasse:

Eu agora só executo xterm -sb -bg black -fg white -e "~/.jedit/macros/LaTeX/pdflatex.sh |" & do jEdit, o pdflatex.sh é o seguinte:

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
    
por 22.01.2014 / 15:29

Tags