at命令可用于安排作业以供将来执行。
这会在执行命令之前设置环境,以匹配在“at”作业创建时的环境。
但是,这似乎不包括环境中定义的 bash 函数。我尝试使用“export -f”导出函数,但这不会出现在为 at 作业创建的环境中。
有谁知道如何让函数在“at”作业的上下文中运行?我知道我可以转换为文件中定义的正确命令,但我很好奇到底是什么阻止了该函数在环境中被拾取。
值得注意的是,如果在环境中执行“export -f myfun”,然后执行“export -p”,则该函数不会出现在环境中。这是一个 bash 问题吗?
Bash 版本:GNU bash,版本 5.2.21(1)-release (x86_64-pc-linux-gnu)
您使用
script.sh
运行的脚本(比如说 at
)将由 atd
守护进程运行,并且与您当前的 shell 会话不再相关。
解决方法:
at ... << EOF
/bin/bash << INNER
$(declare -f)
$(cat script.sh)
INNER
EOF