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!

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).


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)

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.