0

ディレクトリに移動し、エントリごとに 2 つのファイルの内容を表示する bash コマンドが必要なため、次のスクリプトを作成しました。

cd /sys/class/net
for i in *; do echo $i; cat $i/{address,operstate}; done

とにかく短くて良いことはありますか?

4

3 に答える 3

1

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 オプションは (タブを使用して) 位置合わせを行います。

于 2012-04-20T06:39:20.447 に答える
1

の必要はありません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 パラメーター置換を使用して先頭のパス要素を削除し、出力をよりきれいにします。

于 2012-04-19T09:56:30.063 に答える
0

テールがもっと簡単にできることがわかりました。

 tail /sys/class/net/*/{address,operstate}

これは、pips や複合シェル ステートメントを使用しない 1 つのコマンドにすぎません。:) –フルートは今編集

于 2012-04-20T04:35:16.387 に答える