Перенаправлення виводу на змінну?


9

Мені цікаво направляти вихід з двох команд на змінну. Я не хочу, щоб результат відображався на екрані, але натомість був призначений змінній в моєму сценарію, щоб я міг його знову використовувати.

що я роблю, - це отримати розмір файлу з каталогу за допомогою команд, показаних нижче:

ls -l /var/spool | wc -c

Ця команда отримує мені розмір файлу в байтах і відображає вихід у вигляді цілого числа. Мені цікаво, щоб це ціле число було присвоєно змінній, що мені подобається, щоб згодом порівняти її з іншою змінною

Схоже, це не працює:

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

Чи буде перенаправлення працювати?

Подобається це....

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

У будь-якому випадку я хочу, щоб цей числовий результат був призначений змінній і не відображався на екрані.

Будь-які пропозиції дуже вітаються!

Відповіді:


12

Це здається досить відвертим.

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

Синтаксис оболонки $(command)виконує commandта повертає стандартний вихід: просто збережіть його у змінній.

Ваша команда:

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

створить файл, названий sizeу поточному каталозі (містить номер та новий рядок).


або назад процитувати команду: size=`ls -l /var/spool | wc -c`. використовуйте цей формат у своїй відповіді: "` `size =` ls -l / var / spool | wc -c` `` "без подвійних лапок;)
αғsnιη

1
@KasiyA Я вважаю за краще використовувати $()з причин , викладених тут: stackoverflow.com/a/9449788/2907484 :-)
Rmano

1
(1) Після цього ls -l /var/spool | wc -c > size_fileви могли read size_var < size_file. (2) Див. Також Чи може $ () завжди замінювати задні посилання для заміни команд?
G-Man каже: "Відновіть Моніку"

6

Я вважаю за краще рішення, запропоноване у відповіді Рмано , але якщо ви хочете використовувати лише переадресацію:

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

1
Основна перевага використання тільки перепризначення є те , що вона не ковтає помилки ( в залежності від того, як ваш сценарій створений для обробки труб - set -e, set -o pipefailі т.д.). Отже, якщо ви використовуєте $(…)свій скрипт, він буде продовжуватися, тоді як при перенаправлення він може бути налаштований на збій. (що може бути тим, що ви хочете, чи ні).
Гаррет Мотцнер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.