启动时启动的 Slackware 脚本需要设置 /etc/profile.d/* 中的环境变量

启动时启动的 Slackware 脚本需要设置 /etc/profile.d/* 中的环境变量

嘿,我遇到了这个问题,启动时从 rc.local 启动的脚本没有在启动时设置环境变量(在 /etc/profile.d/* 中定义)。我该怎么办?


“su - lisak -c /opt/atlassian-jira-enterprise-4.1.1-standalone/bin/startup.sh”

“苏-lisak-c /opt/aaa2/at-22/bin/startup.sh”


答案1

的脚本/etc/profile.d/*是在它们自己的 shell 中执行的,而不是在源代码中执行的,因此它们设置的环境变量无论如何都不可用。您需要什么变量?您可以使用吗/etc/environment?您可以将变量写入适当脚本格式的文件中var=value,然后在脚本中获取该文件的源代码rc.local吗?

这是来自 Bash 手册页。你可能会发现它很有用。

例如,当 bash 以非交互方式启动以运行 shell 脚本时,它会在环境中查找变量 BASH_ENV,如果该变量出现,则扩展其值,并使用扩展的值作为要读取和执行的文件的名称。Bash 的行为就像执行了以下命令一样: if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi 但 PATH 变量的值不用于搜索文件名。

Bourne shell 类似地使用ENV变量。

答案2

引用自 su 手册页(Slackware 13.1):

       -, -l, --login
       Provide an environment similar to what the user would expect had
       the user logged in directly.

       When - is used, it must be specified as the last su option. The
       other forms (-l and --login) do not have this restriction.

在您的示例中,您没有指定 - 作为最后一个 su 选项。请尝试这样做或使用替代参数。

答案3

我认为最好的解决方案是 source /etc/profile.d/*.sh 或从 rc.local 运行 /etc/profile 因为我不想重复配置启动时脚本和从登录 shell 启动的脚本...

注意:我不知道从 rc.local 运行 /etc/profile 会产生什么后果...所以最好的方法是从 /etc/profile.d/*.sh 在 rc.local 上获取它们


又名:对于 /etc/profile.d/* 中的文件;执行源 $file;完成


替代方案:echo ". /etc/profile" >> $HOME/.bashrc - 适用于单个用户

相关内容