0

我想要一个 bash 命令移动到一个目录,然后为每个条目显示 2 个文件的内容,我制作了这个脚本:

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

有没有办法做得更短更好?

4

3 回答 3

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

上面使用 bash 参数替换删除了前导路径元素,echo以使输出更漂亮。

于 2012-04-19T09:56:30.063 回答
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的答案,但不幸的是它使地址和操作状态彼此相邻。使用 grep,我可以通过排序解决这个问题。但这不是一个命令,抱歉。

grep 的 -T 选项进行对齐(使用制表符)

于 2012-04-20T06:39:20.447 回答
0

我刚刚发现tail可以做得更简单,

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

这只是一个命令,没有点数和复合 shell 语句。:) – flutter 刚刚编辑

于 2012-04-20T04:35:16.387 回答