背景
朝からめちゃくちゃ詰まったのでここに備忘録
内容
問題
下記のようなスクリプトをcron
で実行しようとしたところ。
while true; do
pin17bffn=/var/tmp/pin17
pin17=$(gpio -g read 17)
pin17bf=0
if [[ -e $pin17bffn ]]; then
pin17bf=$(cat $pin17bffn)
fi
if [[ $pin17 -ne $pin17bf ]]; then
curl -s -XPOST -d "$pin17" https://xxxx
fi
echo $pin17>$pin17bffn
sleep 1
done
@reboot nohup /home/pi/door.sh &
うまく動かない…
よく見るとログが出力されていました。
/home/pi/checkpin2.s: 10: /home/pi/checkpin2.s: [[: not found
/home/pi/checkpin2.s: 6: /home/pi/checkpin2.s: [[: not found
/home/pi/checkpin2.s: 10: /home/pi/checkpin2.s: [[: not found
/home/pi/checkpin2.s: 6: /home/pi/checkpin2.s: [[: not found
/home/pi/checkpin2.s: 10: /home/pi/checkpin2.s: [[: not found
/home/pi/checkpin2.s: 6: /home/pi/checkpin2.s: [[: not found
/home/pi/checkpin2.s: 10: /home/pi/checkpin2.s: [[: not found
/home/pi/checkpin2.s: 6: /home/pi/checkpin2.s: [[: not found
/home/pi/checkpin2.s: 10: /home/pi/checkpin2.s: [[: not found
解決
どうやらシェルスクリプトがうまく解釈されていない?
このErrorで調べたところ
String comparison in bash. [[: not found
https://stackoverflow.com/questions/12230690/string-comparison-in-bash-not-found
そのまんまなページを発見
中身を読むと/bin/bash
で実行されていないことが原因
では実際に何で実行されている…?
echo "$SHELL"
>/bin/bash
crontab -e
>*/1 * * * * echo "$SHELL">/var/tmp/shell.log
cat /var/tmp/shell.log
>/bin/sh
ということで、下記のコードをソースに追加して解決
#!/bin/bash
...