我在UbuntuServer(VM)中有.sh脚本:
response=$(curl -H 'Accept: application/vnd.twitchtv.v5+json' -H 'Authorization: OAuth 9f65dd6onr07vhpdqblbiix5rl0tch' -X GET 'https://api.twitch.tv/kraken/streams/127060528' | jq -r '.stream');
now=$(date +"%Y-%m-%d %T");
echo "$now" >> log.txt;
echo "$response" >> log.txt;
if [[ "$response" == "null" ]]
then
echo "ZERO"
else
streamlink -o "dump/stream_$now.mp3" twitch.tv/mahetirecords/clip/FreezingEncouragingCougarSuperVinlin audio
echo "STREAM"
fi
当我通过bash运行脚本时,会触发 THEN 方式。 当我通过crontab运行脚本时,会触发 ELSE 方式。 为什么?
Crontab -e:
* * * * * /home/chesterlife/twitch-interceptor/script.sh
如果流离线,则“ $ response”返回空。这是空文本,因为var=""; if [ "$var" == "$response" ]; then echo "true"; else echo "false"; fi
返回 false
有什么想法吗?
答案 0 :(得分:1)
默认情况下,crontab使用sh
shell执行。您可以使用以下链接中的信息将其更改为bash
:
https://unix.stackexchange.com/questions/94456/how-to-change-cron-shell-sh-to-bash
也请阅读有关the difference between [
and [[
in Bash
虽然[
是POSIX,但是[[
仅受包括bash
在内的某些shell支持。
答案 1 :(得分:0)
您在脚本开头缺少一个shebang,例如:
#!/usr/bin/env bash
此外,您还应该将当前用户的路径(通过echo $PATH
获得)添加到脚本中,以便在与用户相同的健全环境中运行。