全局 shell 变量?

全局 shell 变量?

作为有权访问 UNIX 计算机的系统管理员root,是否可以提供默认的 shell 变量全部系统的用户?

也就是说,作为一个单独的 Unix 用户,我可以通过编辑我的 bash shell 来定义环境变量.bash_profile

export FOO="BAR"

有没有办法为所有用户提供一组默认的环境变量,而无需编辑每个用户的单独 shell 变量?是否有办法为特定用户提供默认变量?

这里是长期*nix用户,但我从来没有在管理 UNIX 机器方面做过太多工作,所以如果这是一个转储/天真的问题,我很抱歉。

答案1

如果我正确理解您的问题,您需要系统范围内的环境变量,系统中的所有用户都可以访问该变量。如果是这样,您可以从 进行设置/etc/profile。从这里,

/etc/profile文件没有太大不同,但它用于在用户 shell 上设置系统范围的环境变量。这些变量有时与 中的变量相同.bash_profile,但是该文件用于设置初始值PATHPS1系统的所有 shell 用户。

答案2

对于设置全局变量,可能有多种方法,具体取决于用户的 shell,以及您的系统是否支持login.conf功能数据库或类似功能,无论用户使用什么 shell,都应该应用这些方法。

最简单的方法就是将你想要的定义添加到 下的相关系统文件中/etc。根据系统上使用的 shell,您可能会发现自己设置和管理多个文件。例如,shbash可能期望找到/etc/profilezsh寻找/etc/zprofile、 而cshtcsh将寻找不同的东西。

如果您的系统支持能力数据库,则只需修改一个文件,所有设置都应该正确应用。例如,在 FreeBSD 下,您可以将 envar 定义添加到setenv任何需要它的用户类别的功能中:

default:\
        :setenv=BLOCKSIZE=K,FOO=BAR:\
        :tc=default:

重建数据库,并在下次登录时$FOO进行设置。

如果您没有login.conf,可能有一种不同的方法在您的系统上全局配置用户环境。

要为特定用户设置变量,我认为您需要使用第一种方法,在该方法中您可以$USERcase特定 shell 支持的语句或类似构造中测试变量的值。例如,这应该适用于sh并兼容:

case $USER in
    root) FOO=ROOTBAR;;
    *) FOO=USERBAR;;
esac
export FOO

相关内容