xterm équivalent à -hold mais seulement si le processus est terminé avec un code de sortie> 0

1

J'exécute une séquence de commandes dans 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 &"(les pipes sont remplies avec un nom de fichier par jEdit lorsque la commande est appelée, mais ce n'est pas un problème jEdit).

Si je l'appelle avec xterm -holdça reste ouvert et je dois le fermer avec la souris ou avec Alt + F4. Si je l'appelle sans -hold, ça va et je ne peux pas voir quelle a été la dernière commande réussie.

Alors est-il possible de:

  1. appeler xterm avec une attente conditionnelle ou
  2. fermez xterm avec une commande lorsqu'il a été appelé avec -hold (le fait de taper exit ferme une fenêtre xterm qui a été ouverte sans -hold, mais pas celle qui a été ouverte avec -hold.
Chris H
la source
Devez-vous l'exécuter en arrière-plan?
suspect
@suspectus Je pense que oui - c'est une question jEdit - si je ne je peux pas utiliser jEdit, ce qui signifie que lorsque pdflatex renvoie une erreur , je peux passer au fichier droite ou aller à la ligne droite et regarder tout le message d'erreur est toujours affiché.
Chris H

Réponses:

1

Si vous pouvez l'utiliser, bashessayez ceci. set -o pipefailis key here - bash quitte une commande dans une chaîne de commandes en pipeline avec un code de sortie. Avec pipefailsi une commande de la chaîne ne l'état d'erreur sera toujours zéro (quel que soit si une erreur est survenue ou non).

#!/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
suspect
la source
Je ne pouvais pas obtenir que cela fonctionne - cela semblait ignorer le pipefail, mais je soupçonne que c'était moi contre les scripts contre jEdit. Inspiré par votre réponse, j'ai mis au point un document qui fonctionne, que je posterai comme réponse au formatage et parce qu'il est trop long pour un commentaire.
Chris H
ok - j'ai hâte de découvrir comment vous avez résolu le problème.
suspect
J'ai triché en copiant-collant le piège d'erreur après chaque étape de compilation, le reste ne faisait que boucler pour correspondre à jEdit.
Chris H
1

Je n'ai pas réussi à obtenir la solution donnée par suspectus, mais inspiré par cette réponse, j'ai obtenu ce qui suit:

Je viens maintenant d'exécuter à xterm -sb -bg black -fg white -e "~/.jedit/macros/LaTeX/pdflatex.sh |" &partir de jEdit, pdflatex.sh est comme suit:

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
Chris H
la source