Rediriger la sortie vers une variable?

9

Je suis intéressant de diriger la sortie de deux commandes vers une variable. Je ne veux pas que la sortie soit affichée à l'écran, mais plutôt assignée à une variable dans mon script pour que je puisse la réutiliser.

ce que je fais est d'obtenir la taille du fichier à partir d'un répertoire en utilisant les commandes ci-dessous:

ls -l /var/spool | wc -c

Cette commande m'obtient la taille du fichier en octets et affiche la sortie sous forme d'entier. Je souhaite obtenir cet entier affecté à une variable de mon goût afin de pouvoir le comparer à une autre variable plus tard

Cela ne semble pas fonctionner:

size = ls -l /var/spool | wc -c

La redirection fonctionnerait-elle?

Comme ça....

ls -l /var/spool | wc -c > size

Dans tous les cas, je souhaite que cette sortie numérique soit affectée à une variable et ne soit pas affichée à l'écran.

Toutes les suggestions sont les bienvenues!

Justin
la source

Réponses:

12

Cela semble assez simple.

romano@RRyS:~$ size=$(ls -l /var/spool | wc -c)
romano@RRyS:~$ echo $size
476

La syntaxe du shell $(command)s'exécute commandet renvoie la sortie standard: enregistrez-la simplement dans une variable.

Votre commande:

ls -l /var/spool | wc -c > size 

va créer un fichier nommé sizedans le répertoire courant (contenant le numéro et une nouvelle ligne).

Rmano
la source
ou en arrière-citer la commande: size=`ls -l /var/spool | wc -c`. utilisez ce format dans votre réponse: "` `size =` ls -l / var / spool | wc -c` `` "sans guillemets;)
αғsнιη
1
@KasiyA Je préfère utiliser $()pour les raisons expliquées ici: stackoverflow.com/a/9449788/2907484 :-)
Rmano
1
(1) Après l'avoir fait ls -l /var/spool | wc -c > size_file, vous pourriez read size_var < size_file. (2) Voir aussi $ () peut-il toujours remplacer les astuces pour la substitution de commandes?
G-Man dit `` Réintègre Monica ''
6

Je préfère la solution offerte par la réponse de Rmano , mais si vous souhaitez utiliser uniquement la redirection:

read size < <(ls -l /var/spool | wc -c)
Radu Rădeanu
la source
1
Le principal avantage d'utiliser uniquement la redirection est qu'il n'avale pas d' erreurs (selon la façon dont vous avez défini votre script pour le traitement de la conduite - set -e, set -o pipefailetc.). Donc, si vous utilisez $(…)votre script, il continuera toujours, alors qu'avec la redirection il peut être configuré pour échouer. (qui peut être ce que vous voulez ou non).
Garrett Motzner