我不明白这是怎么回事:
ls /sys/class/net/wlan0
addr_assign_type broadcast device flags iflink netdev_group queues
subsystem uevent addr_len carrier dormant ifalias link_mode **operstate**
speed tx_queue_len address dev_id duplex ifindex mtu power statistics
for f in $(ls /sys/class/net/); do $(cat /sys/class/net/${f}/operstate); done
cat: /sys/class/net/eth0/operstate: No such file or directory
cat: /sys/class/net/lo/operstate: No such file or directory
cat: /sys/class/net/wlan0/operstate: No such file or directory
我猜$ {f}没有及时扩展cat
。我尝试过引号,比如“$ f”,但它仍无法正常工作。
这确实有效:
for f in $(ls /sys/class/net/); do echo /sys/class/net/${f}/operstate; done
/sys/class/net/eth0/operstate
/sys/class/net/lo/operstate
/sys/class/net/wlan0/operstate
和
cat /sys/class/net/eth0/operstate
up
我错过了什么?为什么cat
无法查看循环中的文件?
答案 0 :(得分:2)
首先,您不应该在循环中重复/sys/class/net/
,因为$f
已经包含这些目录。
for f in $(ls /sys/class/net/); do $(cat ${f}/operstate); done
接下来,循环内的$(...)
需要进行。没有必要捕捉猫的输出。
for f in $(ls /sys/class/net/); do cat ${f}/operstate; done
现在可以使用简单的通配符取消$(ls ...)
:
for f in /sys/class/net/*; do cat ${f}/operstate; done
最后,整个循环可以用cat的单个调用替换。
cat /sys/class/net/*/operstate
答案 1 :(得分:0)
您的bash脚本正在cat
的每个子目录中尝试operstate
名为/sys/class/net
的文件,但找不到该文件。在第二个例子中,你简单地echo
打印出一个很好的字符串。