2013-03-06 2 views
0

Что я хочу сделать, достаточно просто, но я не могу сделать это без нескольких команд. Это то, на что похоже. Мне бы хотелось, чтобы это можно было сделать в одной небрежно выглядящей строке, которая сразу передает все команды.Формат вывода нескольких команд bash в столбцы

# cat /sys/class/scsi_host/host*/device/fc_host:host*/port_name >port 
# cat /sys/class/scsi_host/host*/device/fc_host:host*/speed >speed 
# cat /sys/class/scsi_host/host*/device/fc_host:host*/port_state >state 
# paste -d ' ' port speed state 
0x218000e01a0002d2 8 Gbit Online 
0x218100e01a2002d2 8 Gbit Online 

Я пытался сделать это с помощью подклассов, переменных и т. Д. Формат заканчивается несогласованным или хуже.

# echo "$port_name" "$speed" "$state" 
0x218000e01a0002d2 
0x218100e01a2002d2 8 Gbit 
8 Gbit Online 
Online 

# paste -d ' ' "$(cat /sys/class/scsi_host/host*/device/fc_host:host*/port_name)" "$(cat /sys/class/scsi_host/host*/device/fc_host:host*/speed)" 
paste: 0x218000e01a0002d2 
0x218100e01a2002d2: No such file or directory 

ответ

2

Вместо подстановки команд, попробуйте процесс замены:

paste -d ' ' <(cat /sys/class/scsi_host/host*/device/fc_host:host*/port_name) \ 
      <(cat /sys/class/scsi_host/host*/device/fc_host:host*/speed) \ 
      <(cat /sys/class/scsi_host/host*/device/fc_host:host*/port_state) 
+0

You da man! Благодаря! –

+0

Я прочитал о замещении процесса раньше с тройником, но это меня сбило с толку. Это ставит его в более легкий контекст. –

-1

Что об этом?

for i in /sys/class/fc_host/host*; do (cd $i; echo -e "$(cat port_name)\t$(cat port_state)\t$(cat speed)"); done 
Смежные вопросы