J'essaie de créer un script qui synchronise mon ordinateur avec Google Drive à l'aide de l'outil grive . J'aimerais stocker le résultat de la commande grive
dans une variable bash, mais je n'arrive pas à le faire fonctionner.
Certains googler m'a appris que les sorties de commande peuvent être enregistrées dans des variables en utilisant la syntaxe suivante:
VARABLENAME=$(command)
et la sortie peut être imprimée plus tard par
echo ${VARIABLENAME}
Cependant, la commande grive semble être une exception à cela, car lorsque j'utilise cette syntaxe, elle affiche toujours la sortie dans le terminal et le contenu de la variable est vide.
Comment puis-je stocker la sortie de grive
dans une variable correctement?
Le problème était que la commande grive
était sortie dans le flux d’erreurs, STDERR (descripteur de fichier 2), qui est normalement utilisé pour transmettre des messages d’erreur lorsque le descripteur STDOUT (descripteur de fichier 1) est utilisé pour afficher la sortie réelle (en cas de succès) de tout programme ( à proprement parler).
Je n'ai pas utilisé grive
name__, mais selon vos mots, le développeur aurait peut-être utilisé STDERR uniquement pour afficher les messages de la commande.
Maintenant, la substitution de commande que vous avez utilisée:
VARABLENAME=$(command)
enregistrera le STDOUT de command
dans VARABLENAME
name__, pas STDERR. En conséquence, la variable était vide et vous voyiez des messages sur le terminal.
J'ai suggéré:
VARABLENAME="$(command 2>&1)"
cela enregistrera à la fois STDOUT et STDERR dans la variable (dans votre cas, STDERR étant donné qu'il n'y a pas de STDOUT), vous obtiendrez ainsi le résultat souhaité avec echo "${VARIABLENAME}"
.
De plus, comme il n'y a pas de STDOUT, vous pouvez sauvegarder uniquement le STDERR dans la variable (généralisation, vrai pour tout programme de ce type):
VARABLENAME="$(command 2>&1 >/dev/null)"