ディレクトリに移動し、エントリごとに 2 つのファイルの内容を表示する bash コマンドが必要なため、次のスクリプトを作成しました。
cd /sys/class/net
for i in *; do echo $i; cat $i/{address,operstate}; done
とにかく短くて良いことはありますか?
grep と sort は同様の答えを与えることができます
(cd /sys/class/net/;grep -T '' */{addre,o}*|sort)
出力例
eth0/address :10:9a:dd:6e:66:33
eth0/operstate :down
lo/address :00:00:00:00:00:00
lo/operstate :unknown
wlan0/address :e0:f8:47:20:b3:92
wlan0/operstate:up
tail を使用した回答は本当に気に入りましたが、残念ながら、アドレスと operstate が隣り合ったままになっています。grep を使用すると、sort でこれを修正できます。しかし、それは 1 つのコマンドではありません。
grep の -T オプションは (タブを使用して) 位置合わせを行います。
の必要はありませんcd
。次のことを試してください。
for i in /sys/class/net/*; do echo "${i##/*/}:"; cat $i/{address,operstate}; done
これにより、次のような出力が得られるはずです。
eth2:
0f:ed:37:1f:6c:c7
up
lo:
00:00:00:00:00:00
unknown
wlan0:
94:58:29:b6:07:3e
down
上記echo
は、bash パラメーター置換を使用して先頭のパス要素を削除し、出力をよりきれいにします。
テールがもっと簡単にできることがわかりました。
tail /sys/class/net/*/{address,operstate}
これは、pips や複合シェル ステートメントを使用しない 1 つのコマンドにすぎません。:) –フルートは今編集