0

私がやりたいことは単純ですが、いくつかのコマンドがないと実行できません。これが今のところの様子です。一度にすべてのコマンドを渡すだけの、ずさんな 1 行でこれを実行できるようにしたいと考えています。

# 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
4

2 に答える 2

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)
于 2013-03-06T15:09:18.760 に答える
-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
于 2014-04-16T09:25:12.717 に答える