我想要一个bash命令移动到一个目录,然后为每个条目显示2个文件的内容,我制作了这个脚本:
cd /sys/class/net
for i in *; do echo $i; cat $i/{address,operstate}; done
无论如何要做得更短更好吗?
答案 0 :(得分: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参数删除了前导路径元素
替换使输出更漂亮。
答案 1 :(得分: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,我可以通过排序来解决这个问题。但对不起,这不是一个命令。
grep的-T选项进行对齐(使用选项卡)
答案 2 :(得分:0)
我刚发现尾巴可以做得更简单,
tail /sys/class/net/*/{address,operstate}
这只是一个命令,没有pips和复合shell语句。 :) - 刚刚编辑的fluter