Reindirizzare l'output su una variabile?


9

Sono interessante nel dirigere l'output da due comandi a una variabile. Non voglio che l'output venga visualizzato sullo schermo, ma invece assegnato a una variabile all'interno del mio script in modo da poterlo riutilizzare.

quello che sto facendo è ottenere la dimensione del file da una directory usando i comandi visti sotto:

ls -l /var/spool | wc -c

Questo comando mi dà la dimensione del file in byte e visualizza l'output come un numero intero. Sono interessato a ottenere questo numero intero assegnato a una variabile di mio gradimento in modo da poterlo confrontare con un'altra variabile in seguito

Questo non sembra funzionare:

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

Il reindirizzamento funzionerebbe?

Come questo....

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

Ad ogni modo, desidero che questo output numerico sia assegnato a una variabile e non visualizzato sullo schermo.

Ogni suggerimento è molto gradito!

Risposte:


12

Sembra abbastanza semplice.

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

La sintassi della shell $(command)viene eseguita commande restituisce l'output standard: è sufficiente salvarlo in una variabile.

Il tuo comando:

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

creerà un file denominato sizenella directory corrente (contenente il numero e una nuova riga).


o back-citare il comando: size=`ls -l /var/spool | wc -c`. usa questo formato nella tua risposta: "` `size =` ls -l / var / spool | wc -c` `` "senza virgolette;)
αғsнιη

1
@KasiyA Io preferisco usare $()per le ragioni spiegate qui: stackoverflow.com/a/9449788/2907484 :-)
Rmano

1
(1) Dopo averlo fatto ls -l /var/spool | wc -c > size_file, potresti read size_var < size_file. (2) Vedi anche $ () può sempre sostituire i backtick per la sostituzione dei comandi?
G-Man dice "Ripristina Monica" il

6

Preferisco la soluzione offerta dalla risposta di Rmano , ma se si desidera utilizzare solo il reindirizzamento:

read size < <(ls -l /var/spool | wc -c)

1
Il vantaggio principale di utilizzare solo il reindirizzamento è che non ingoiare errori (a seconda di come avete lo script impostato per la lavorazione del tubo - set -e, set -o pipefaile così via). Quindi se usi il $(…)tuo script continuerà sempre, mentre con il reindirizzamento può essere impostato per fallire. (che può essere quello che vuoi o no).
Garrett Motzner,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.