【发布时间】:2019-01-20 05:30:54
【问题描述】:
我在 macOS (High Sierra) 上过滤 ifconfig 的输出,以使用简单的 if 语句触发操作,尽管相应的字符串似乎匹配但并未触发该操作(使用 @987654322 进行测试时) @)。
脚本运行时,如果网络en1处于活动状态,则预期的操作是打印OK。
我试过了:
-
printf "%s"在awk命令中 - 对
"active"使用双引号(简单) - 将
active保存在变量中以进行比较 - 将
en1_status=`...`替换为en1_status=$(...)
没有成功。
#!/bin/bash
en1_status=`ifconfig en1 | grep "status: " | awk '{print $2}'`
if [ "$en1_status" = active ]; then
echo OK
fi
而$en1_status 似乎与active 匹配:
echo $en1_status
active
【问题讨论】:
-
请务必在您的帖子中提及预期输出是什么?
-
关于行为,在
en1处于活动状态的情况下,脚本看起来确实设置了ALL_PROXY变量。但是,您并没有解释您期望发生的事情。我推测问题是您希望在命令返回后设置ALL_PROXY变量;这不会发生,因为变量向下继承,并且不会传播回调用者。 -
运行
bash -x yourscript来记录执行。echo不可信——你可以很容易地得到看起来相同但实际上不同的字符串。 -
顺便说一句,
grep | awk毫无意义,因为awk可以做任何事情grep可以做更多;en1_status=$(ifconfig en1 | awk '/status: / { print $2 }')会做同样的事情,而无需在管道中进行额外的处理。 -
嗯。我想知道您是否将
grep配置为即使输出到 FIFO 也可以进行颜色突出显示?这可以解释为什么切换到awk可以解决问题(它应该只是性能调整,而不是修复)。