Raspbian(Jessy) - root @ Raspberry Pi - Putty
在终端我输入
finalanswer=0
现在我得到了一个包含此代码的脚本
#!/bin/bash
source /lib/lsb/init-functions
echo $finalanswer #just as a test
if [ ! "$finalanswer" = "0" ]
then
rm -r mnt/objects/all
log_warning_msg "All Files has been deleted" || true
touch its_over.txt
else
let finalanswer=1
log_action_msg "Var finalanswer was 0. setting back to 1" || true
fi
每小时都会有一个cronjob启动此脚本
SOOO。某处肯定有错误。 因为他正在阅读变量$ finalanswer。
这意味着在此脚本之外定义的变量不起作用吗?
我该如何解决这个问题?
答案 0 :(得分:5)
子进程不会继承Shell变量。如果要继承变量,则必须是环境变量。您可以使用SELECT
CASE WHEN vanguard = 1 THEN 30 ELSE gameid END AS gameid
FROM (... main query ...)
GROUP BY CASE WHEN gameid = 1 THEN 30 ELSE gameid END
ORDER BY SUM(count) DESC
LIMIT 1;
命令创建环境变量。
export
或
export finalanswer=0
您还可以通过将赋值放在命令的开头,仅在命令持续时间内导出变量:
finalanswer=0
export finalanswer
请注意,您在shell中分配的变量不可供finalanswer=0 /path/to/script
个作业使用。变量只能导出到shell的后端进程,而cron
运行的进程与shell进程无关。如果要设置变量以在cron
作业中使用,可以将赋值放入crontab文件中。
答案 1 :(得分:1)
您可以通过将其定义放在要运行的命令之前为单个命令定义变量:
$ VARIABLE=hunter perl -E 'say $ENV{VARIABLE}'
hunter
你可以为cron条目做同样的事情:
*/10 * * * * VARIABLE=hunter <command>