我有一个 shell 脚本出口执行时变量的值。另一个脚本中将使用相同的值。
如何运行这个脚本(测试文件)在 cron 中。
#!/bin/sh
export I="10"
echo $I
我将使用 root 访问权限来执行 cron。我尝试了这个命令:
*/5 * * * * /home/ubuntu/backup/.test.sh
我检查了环境变量,没有任何更新。
答案1
环境变量只能在进程和直接子进程之间传递。它无法更改环境变量或将环境变量导出到不同的进程树。此外,导出的变量只能用于再次处理当前进程的直接后代,而不是在导出完成的同一级别。
答案2
事实上,变量不会在 cron 中的脚本之间共享。即使您定义了一个环境变量,如 联机帮助页如果您有一个更改该变量的脚本,那么第二个脚本不会真正更改该变量。但是,您可以使用临时文件(如果您不想重写磁盘上的文件,甚至可以在内存中创建它)在脚本之间使用。
例如:
10 * * * * /path/to/script1.sh
20 * * * * /path/to/script2.sh
script1.sh的内容:
#!/bin/bash
echo "VAR1='VALUE1'" > /dev/shm/cronsharedfile
script2.sh的内容:
#!/bin/bash
source /dev/shm/cronsharedfile
do_something_with $VAR1
在这种情况下,第二个脚本将具有由 script1.sh 分配的正确值。我使用了保存在共享内存中的文件(/dev/shm/cronsharedfile),但您可以在磁盘上创建文件(/path/to/whateverfile)。
答案3
如果图中有 2 个脚本,则第一个脚本中导出的变量将对下一个脚本可见。所以,如果你有一个像这样的 cron 条目
*/5 * * * * ( test1.sh; test2.sh ) > log.txt
和测试1.sh作为
#!/bin/sh
export I="10"
echo $
然后$I
将可见测试2.sh。