web-dev-qa-db-fra.com

Stocke la sortie de la commande grive dans une variable du script bash

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?

4
quantumbutterfly

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é grivename__, 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 commanddans VARABLENAMEname__, 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)"
8
heemayl