2013-03-06 69 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 

我試圖用子shell,變量等來做到這一點。格式結束了錯位,或更糟。

# 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

你達人!謝謝! – 2013-03-06 15:50:54

+0

我已經閱讀過有關tee的過程替換,但這讓我感到困惑。這將其放入更簡單的上下文中。 – 2013-03-06 16:07:57

-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