如何重载profile配置文件,无需退出会话使history时间配置脚本生效?
问题核心原因
你在脚本内部执行source、exec不生效,本质是Linux进程的环境隔离特性导致的:
- 直接运行shell脚本时,系统会创建独立的子shell进程运行脚本代码,所有环境变量修改、配置重载操作都仅在这个子进程内有效
- 脚本运行结束后子进程直接销毁,你当前正在使用的父shell会话的环境不会受到任何影响,所以配置自然不会生效
- 你写的
exec bash "$PROOT" && exec bash "$PUSER"逻辑本身也有问题:exec会直接替换当前进程,第一条exec执行后后续代码根本不会运行,而且bash /etc/profile是把profile作为普通脚本执行,不会把配置加载到当前会话环境。
正确解决方案
你不需要在脚本里尝试自动重载配置,仅保留配置写入逻辑即可,修改后的脚本参考:
#!/bin/bash FECHA_HORA="%d/%b/%Y %H:%M" RUTA="/etc/profile.d" if [[ ${UID} -ne 0 ]]; then echo "请使用管理员权限执行脚本:sudo ${0}" exit 1 fi cat <<EOF> ${RUTA}/timeHistory.sh export HISTTIMEFORMAT="${FECHA_HORA} " EOF echo "配置已写入完成,如需在当前会话立即生效,请手动执行命令: source /etc/profile" echo "其他已登录的用户执行上述命令或重新登录即可生效,新登录用户会自动加载配置" exit 0
运行完上述脚本后,在你需要生效的会话里手动执行source /etc/profile即可,不需要关闭会话。
内容的提问来源于stack exchange,提问作者richys
相关产品推荐
相关产品推荐

