作为有权访问 UNIX 计算机的系统管理员root
,是否可以提供默认的 shell 变量全部系统的用户?
也就是说,作为一个单独的 Unix 用户,我可以通过编辑我的 bash shell 来定义环境变量.bash_profile
export FOO="BAR"
有没有办法为所有用户提供一组默认的环境变量,而无需编辑每个用户的单独 shell 变量?是否有办法为特定用户提供默认变量?
这里是长期*nix
用户,但我从来没有在管理 UNIX 机器方面做过太多工作,所以如果这是一个转储/天真的问题,我很抱歉。
答案1
如果我正确理解您的问题,您需要系统范围内的环境变量,系统中的所有用户都可以访问该变量。如果是这样,您可以从 进行设置/etc/profile
。从这里,
该/etc/profile
文件没有太大不同,但它用于在用户 shell 上设置系统范围的环境变量。这些变量有时与 中的变量相同.bash_profile
,但是该文件用于设置初始值PATH
或PS1
系统的所有 shell 用户。
答案2
对于设置全局变量,可能有多种方法,具体取决于用户的 shell,以及您的系统是否支持login.conf
功能数据库或类似功能,无论用户使用什么 shell,都应该应用这些方法。
最简单的方法就是将你想要的定义添加到 下的相关系统文件中/etc
。根据系统上使用的 shell,您可能会发现自己设置和管理多个文件。例如,sh
和bash
可能期望找到/etc/profile
、zsh
寻找/etc/zprofile
、 而csh
或tcsh
将寻找不同的东西。
如果您的系统支持能力数据库,则只需修改一个文件,所有设置都应该正确应用。例如,在 FreeBSD 下,您可以将 envar 定义添加到setenv
任何需要它的用户类别的功能中:
default:\
:setenv=BLOCKSIZE=K,FOO=BAR:\
:tc=default:
重建数据库,并在下次登录时$FOO
进行设置。
如果您没有login.conf
,可能有一种不同的方法在您的系统上全局配置用户环境。
要为特定用户设置变量,我认为您需要使用第一种方法,在该方法中您可以$USER
在case
特定 shell 支持的语句或类似构造中测试变量的值。例如,这应该适用于sh
并兼容:
case $USER in
root) FOO=ROOTBAR;;
*) FOO=USERBAR;;
esac
export FOO