Команда запуска на основе вывода другой команды

ОС: AIX 7100-04-1216

Поэтому в основном я пытаюсь написать цикл for, который видит, какие volumegroups у меня есть в моей системе, какие файловые системы находятся в этих группах томов и каков размер каждой из этих файловых систем.

У меня есть следующий код:

for LINE in `lsvg` ; do echo "Volume Group: "${LINE} for LINE2 in `lsvgfs ${LINE}` ; do echo "`lsvgfs ${LINE}` \n" df -g ${LINE2} done done 

Выход lsvg

 rootvg nimvg 

Вывод lsvgfs (для rootvg)

 / /usr 

Выход lsvgfs (для nimvg)

 /export/nim/lpp_source /export/nim/spot 

Выход df -g (для / в volumegroup rootvg)

 Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/hd4 5.25 2.86 46% 9957 2% / 

Выход df -g (для / usr в volumegroup rootvg)

 Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/hd2 2.00 0.17 92% 43194 50% /usr 

Выход df -g (для / export / nim / lpp_source в volumegroup nimvg)

 Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/fslv02 10.00 8.24 18% 597 1% /export/nim/lpp_source 

Выход df -g (для / export / nim / spot в volumegroup nimvg)

 Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/hd4 5.25 2.86 46% 9957 2% / 

Что он должен делать:

 Volume Group: rootvg File System: / /dev/hd4 5.25 2.86 46% 9957 2% / File System: /usr /dev/hd2 2.00 0.17 92% 43194 50% /usr File System: /var Volume Group: nimvg File system: /export/nim/lpp_source /dev/fslv02 10.00 8.24 18% 597 1% /export/nim/lpp_source File system: /export/nim/spot /dev/hd4 5.25 2.86 46% 9957 2% / 

Что я получаю:

 Volume Group: rootvg / /usr Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/hd4 5.25 2.86 46% 9957 2% / / /usr Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/hd2 2.00 0.17 92% 43194 50% /usr Volume Group: nimvg /export/nim/lpp_source /export/nim/spot Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/fslv02 10.00 8.24 18% 597 1% /export/nim/lpp_source /export/nim/lpp_source /export/nim/spot Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/hd4 5.25 2.86 46% 9957 2% / 

One Solution collect form web for “Команда запуска на основе вывода другой команды”

Сначала обратите внимание на стиль. Использование цикла for для итерации по линиям вывода редко является хорошей идеей. Цикл for будет разбивать свой вход на пробелы, так что, если у вас более одного слова в строке, он разбивает каждый на другую переменную. Вы должны использовать, while вместо этого, поскольку это имеет дело с пробелами более изящно. Кроме того, обычно используется $(command) вместо `command` .

Это, вероятно, не ваша проблема. Основная проблема заключается в том, что вы эхом lsvgfs ${LINE} результаты lsvgfs ${LINE} для каждой строки результатов lsvgfs ${LINE} :

 for LINE2 in `lsvgfs ${LINE}` ; do echo "`lsvgfs ${LINE}` \n" done 

Итак, вы, конечно, получаете эти строки дважды:

 / /usr 

Попробуйте это вместо этого:

 lsvg | while read LINE; do echo "Volume Group: ${LINE}" lsvgfs "${LINE}" | while read LINE2; do echo "File System: ${LINE2}" df -g ${LINE2} done echo "" done 
  • Как grep «блокировать» строки из странного файла
  • Как убить призрачный процесс? AIX 6.1
  • Mailx с несколькими вложениями uuencode и телом
  • AIX: ошибка lsdev на устройстве pkcs11
  • Определить владельца сеанса процесса
  • количество сеансов HTTP = количество сеансов TCP?
  • Как изменить владельца файла в AIX?
  • AIX cifs имя хоста с подчеркиванием
  • Unix: вопрос о xargs
  • Как настроить заголовки электронной почты с помощью / usr / bin / mail?
  • Использование процессора и памяти в Aix
  • Linux и Unix - лучшая ОС в мире.