vol*_*ron 6 linux bash cron bashrc bash-scripting
没有为非交互式/非登录 shell 调用 rc 文件;例如,那些由cron运行的
(我不确定这一点,并且会依靠社区的专业知识)
非交互式shell 需要设置BASH_ENV环境变量,这样才能将其设置为特定的 rc 文件(例如,BASH_ENV=$HOME/.bash_profile)
我不确定是否有过多的 rc 文件可用,所以很好奇是否有我不熟悉的文件。希望找到一个满足以下条件的rc文件:
您的具体问题的答案是通常只加载/etc/bash.bashrc(或 /etc/bashrc)。
似乎有几种方法可以解决这个问题,不幸的是,大多数都是解决方法。没有特定的优先顺序:
登录运行/etc/profile,通常您可以将自定义脚本放在/etc/profile.d/*.sh
将其包装在 bash 登录名中
有时最容易触发登录,即
echo "do whatever $PATH $BASH $PS1 $0"
Run Code Online (Sandbox Code Playgroud)
变成
bash -lc 'echo "do whatever $PATH $BASH $PS1 $0"'
Run Code Online (Sandbox Code Playgroud)
手动加载配置文件
做登录所做的事情,手动加载配置文件
source /etc/profile;echo "do whatever $PATH $BASH $PS1 $0"
Run Code Online (Sandbox Code Playgroud)
对于简单的变量,你可以添加到/etc/environment看到的Ubuntu系统wide_environment_variables但变量扩张确实不工作
THING_HOME="/opt/thing"
PATH="$PATH:/opt/thing" # this will NOT work
Run Code Online (Sandbox Code Playgroud)
对于 PATH 你可以附加到它例如 sudo sed -i 's#PATH=\"[^\"]*#&:/opt/thing#' /etc/environment
您可以添加到/etc/bash.bashrc(或 /etc/bashrc),但是如果非交互式,这通常会提前退出,因此您需要在之前修改添加内容:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Run Code Online (Sandbox Code Playgroud)
EnvironmentFile和Environment例如systemctl edit --full cron.service我有兴趣听听其他人是否有更好的解决方法!
| 归档时间: |
|
| 查看次数: |
3503 次 |
| 最近记录: |