【发布时间】:2010-08-25 19:40:33
【问题描述】:
我有一个奇怪的问题,与通过 cron(通过 crontab -e 调用)运行 BASH 脚本有关。
这是脚本:
#!/bin/bash
SIG1="$(iwconfig wlan0 | awk '/Quality=/ { print $2} ' | cut -c 9-10)"
SIG2="$(iwconfig wlan0 | awk '/Quality=/ { print $2} ' | cut -c 12-13)"
echo "$SIG1:$SIG2" >> test.txt
exit
从命令行运行时,45:70 的预期输出回显到文本文件的末尾。但是,当我通过 cron(使用 crontab -e)和以下条目运行脚本时:
* * * * * bash /home/rupert/test.sh
我只是将冒号 (:) 回显到文本文件中,没有创建值 SIG1 和 SIG2,我不知道为什么。为什么通过 cron 运行会弄乱脚本?
FWIW,这里是 iwconfig wlan0 的输出,没有额外的处理:
wlan0 IEEE 802.11abgn ESSID:"plumternet"
Mode:Managed Frequency:2.452 GHz Access Point: 00:18:84:2A:68:AD
Bit Rate=54 Mb/s Tx-Power=15 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:off
Link Quality=46/70 Signal level=-64 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
我这样做是因为我想在 LCD 屏幕上显示 WiFi 链接质量值“46/70”,而我使用的程序通过读取文本文件来执行此操作。但是,当通过 cron 运行时,值会丢失...???
我正在使用 cut -c 9-10 和 cut -c 12-13 因为我认为“/”可能会导致脚本出现问题,我很乐意使用 cut -c 9-13 ,但我认为它可能会解决问题,但它没有。
救命!!
酷,感谢你们,我意识到这是一个 PATH 问题,只需提供 iwconfig (/sbin/iwconfig) 的完整路径即可修复它。这是现在显示所有正确信息的 LCD 屏幕图片:
【问题讨论】:
-
使用
-e开关启动一个bash 脚本是一个好习惯,或者把它放在shebang 行。这样,它会在第一个失败的命令上中止脚本,为您提供失败的命令行编号,并可能有助于避免由于先前失败的命令而导致的数据损坏。