J'ai un fichier texte composé de commandes différentes:bash - command not found lors de l'analyse d'un fichier texte avec les commandes
set +e; false; echo $?
(false; echo foo); echo \ $?
for i in .; do (false; echo foo); echo \ 1:$?; done; echo \ 2:$?
et ainsi de suite.
Je souhaite tester ces commandes ligne par ligne, dans son ensemble, dans un processus bash enfant en utilisant set -e
, puis vérifiez le code d'erreur du processus bash parent pour voir si l'enfant a quitté avec une erreur. Je suis bloqué sur la façon de traiter les commandes les plus simples (par exemple le premier listé ci-dessus). Voici une de mes tentatives récentes:
mapfile file < "$dir"/errorData
bash -c "${file[0]}"
echo $?
retours
bash: set +e: command not found
bash: false: command not found
bash: echo 127: command not found
J'ai essayé plusieurs variantes sans chance. L'utilisation de bash -c \'"${file[1]}"\'
conduit à un message d'erreur sur la commande introuvable, avec les trois chaînes ci-dessus combinées en une longue chaîne. Bien sûr, simplement encapsuler les commandes de fichiers dans des guillemets forts et les envoyer directement à bash
dans un shell interactif fonctionne très bien.
Edit: J'utilise bash 4.4.12 (1)
Je ne peux pas reproduire ces erreurs sur Bash v4.3.48. Tout fonctionne bien. – randomir
Etes-vous sûr de vouloir exécuter (-c) "$ {file [0]}", ou voulez-vous l'indiquer plutôt avec. "$ {fichier [0]}"? – yacc
@yacc Sans -c, la commande échoue car bash attend un fichier ou un répertoire. – LumpyGrads