我想做的很简单,但如果没有几个命令我就无法完成。这就是它到目前为止的样子。我希望能够在一个看起来很简单的线条中做到这一点,它只是一次传递所有命令。
# 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
答案 0 :(得分: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)
答案 1 :(得分:-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