Interesuje mnie przekierowanie wyjścia dwóch poleceń do zmiennej. Nie chcę, aby dane wyjściowe były wyświetlane na ekranie, ale zamiast tego są przypisane do zmiennej w moim skrypcie, aby móc jej ponownie użyć.
to, co robię, to uzyskanie rozmiaru pliku z katalogu przy użyciu poniższych poleceń:
ls -l /var/spool | wc -c
To polecenie podaje mi rozmiar pliku w bajtach i wyświetla wynik jako liczbę całkowitą. Jestem zainteresowany przypisaniem tej liczby całkowitej do zmiennej, która mi się podoba, aby później móc ją porównać z inną zmienną
To nie działa:
size = ls -l /var/spool | wc -c
Czy przekierowanie działałoby?
Lubię to....
ls -l /var/spool | wc -c > size
Tak czy inaczej chcę, aby dane liczbowe były przypisywane do zmiennej i nie były wyświetlane na ekranie.
Wszelkie sugestie są bardzo mile widziane!
źródło
size=`ls -l /var/spool | wc -c`
. użyj tego formatu w swojej odpowiedzi: "` `size =` ls -l / var / spool | wc -c `` '' bez podwójnych cudzysłowów;)$()
z powodów wyjaśnionych tutaj: stackoverflow.com/a/9449788/2907484 :-)ls -l /var/spool | wc -c > size_file
możeszread size_var < size_file
. (2) Zobacz także Czy $ () zawsze zastępuje backtyki w celu zastąpienia poleceń?Wolę rozwiązanie oferowane przez odpowiedź Rmano , ale jeśli chcesz użyć tylko przekierowania:
źródło
set -e
,set -o pipefail
itp.) Jeśli więc użyjesz$(…)
skryptu, zawsze będzie on kontynuowany, natomiast w przypadku przekierowania można go ustawić tak, aby nie działał. (które może być tym, czego chcesz lub nie).