J'ai un script qui appelle un programme (en particulier, une ttf2afm
partie de tetex 3.0) qui se sépare parfois et parfois pas. Les informations dont j'ai besoin sont toujours imprimées avant qu'elles ne se séparent, mais j'ai du mal à empêcher la redirection du tuyau d'échouer et à ne rien envoyer au tuyau lorsque le programme échoue.
J'ai essayé de rediriger via un FIFO, entre parenthèses le processus avec un true
à la fin, en exécutant à partir d'une fonction shell et en encapsulant sh -c
, mais le script ne semble jamais laisser le processus produire quoi que ce soit , redirigé ou autre - pas même vers stderr.
Je sais qu'il est capable de sortie, étant donné qu'il est parfaitement capable de le donner à partir de la ligne de commande, mais pas à partir d'un script pour une raison quelconque.
Ma question est, existe-t-il un moyen pour le script d'ignorer le fait que le programme segfaults et me donne quand même la sortie?
J'utilise BASH 4.1.10 (2) -release.
la source
Je l'ai finalement compris à travers un processus d'essais et d'erreurs. La solution est un peu compliquée:
Apparemment, les
exec
causesttf2afm
de prendre en charge le processus de sous-shell avec l'erreur piégée, le faisant fonctionner dans un environnement où il n'a pas d'importance s'il se trompe.Le piégeage du
ERR
signal tout compris arrêtera la mort du sous-shell et enverra un signal au script principal - qui se terminera immédiatement si c'est le cas - lorsque le programme échoue.Le seul problème est que le noyau lui - même produira un tas de déchets de trace de pile directement sur le périphérique de la console une fois le processus segfaults, donc il n'y a aucun moyen de l'empêcher d'être sorti [à ma connaissance], mais cela n'a pas d'importance car cela n'affecte pas stdout ou stderr.
la source
ttf2afm
directement la mise en mémoire tampon utilisée par . Je me demande comment(trap true ERR; exec ttf2afm "$FONT")| …
parvient à se comporter différemment dettf2afm "$FONT" | …
.