linux - shell 脚本 - 如何在不在脚本中定义变量的情况下为 shell 脚本使用变量

标签 linux bash shell

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 每小时启动这个脚本

太好了。某处一定有错误。 因为他将变量 $finalanswer 视为空。

这意味着在此脚本之外定义的变量将不起作用?

我该如何解决这个问题?

最佳答案

Shell 变量不会被子进程继承。如果你想让一个变量被继承,它必须是一个环境变量。您可以使用 export 命令创建环境变量。

export finalanswer=0

finalanswer=0
export finalanswer

您还可以通过将赋值放在命令的开头来仅在命令执行期间导出变量:

finalanswer=0 /path/to/script

请注意,您在 shell 中分配的变量不会可用于 cron 作业。变量只能导出到 shell 后代的进程,cron 运行的进程与您的 shell 进程无关。如果您想设置一个变量用于 cron 作业,您可以将赋值放入 crontab 文件本身。

关于linux - shell 脚本 - 如何在不在脚本中定义变量的情况下为 shell 脚本使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35586093/

相关文章:

c++ - 在 Linux 中搜索用户定义的文件

c - (Osh) Omake 错误 : Unexpected Token: String: {

python - shell 文本到 python 字符串

linux - 什么情况下是在前台或后台进行关闭/关闭?

linux - Shell 命令检查文件是否有今天的日期

linux - 尝试访问我们的 TFS 2010 服务器时,我们没有从 Linux 中的 TF CLC 命令获得任何反馈

Bash 中的字符串差异

linux - 系统启动时使用rc.local文件启动程序是否正确?

linux - 递归复制特定文件

bash - 从 Bash 函数返回文件描述符