У меня есть странная проблема, связанная с запуском скрипта BASH через cron (вызывается через crontab -e).Как я могу остановить crontab от испортить этот простой скрипт 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
вторит до конца текстового файла. Однако, когда я бегу сценарий через хрон (с использованием кронтаб -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
Я делаю все это, потому что я хочу, чтобы отобразить WiFi Link значение качества «46/70» на ЖК-экране и программа, которую я использую, делает это, читая текстовый файл. Однако при запуске через cron значения теряются ... ???
Я использую cut -c 9-10 и cut -c 12-13, потому что я думал, что «/» может вызвать проблему в скрипте, я был бы рад просто использовать cut -c 9- 13, но я подумал, что это может решить проблему, но это не так.
Справка!
Прохладный, спасибо вам, ребята, я понял, что это проблема PATH, просто давая полный путь к iwconfig (/ sbin/iwconfig), исправил его. Вот ПИК ЖК-экран теперь показывает все правильно данные:
http://img835.imageshack.us/img835/4175/20100825122413.jpg
Это хорошая практика, чтобы запустить скрипт bash с помощью переключателя '-e' или поставить его на линию shebang. Таким образом, он прерывает выполнение сценария первой неудавшейся команды, дает вам номер неудавшейся командной строки и, возможно, помогает избежать повреждения данных из-за ранее неудавшейся команды. –