这很烦我。我看到了一些建议(都使用不同的文件和语法),但没有一个起作用。
如何为特定用户设置环境变量?我正在挤压debian。我应该在文件中放入ABC =“ 123”的确切语法是什么?
.bashrc
是最主要的地方。
.bash_profile
包含类似的内容[[ -f ~/.bashrc ]] && . ~/.bashrc
。
这很烦我。我看到了一些建议(都使用不同的文件和语法),但没有一个起作用。
如何为特定用户设置环境变量?我正在挤压debian。我应该在文件中放入ABC =“ 123”的确切语法是什么?
.bashrc
是最主要的地方。
.bash_profile
包含类似的内容[[ -f ~/.bashrc ]] && . ~/.bashrc
。
Answers:
您必须将声明放入外壳的初始化文件中:
如果您使用的是bash,ash,ksh或其他Bourne风格的外壳,则可以添加
ABC="123"; export ABC
在您的.profile
文件(${HOME}/.profile
)中。在大多数Unix安装中,尤其是在Debian中,这是默认情况。
如果您的登录shell是bash,则可以使用.bash_profile
(${HOME}/.bash_profile
)或.bash_login
代替。
注意:如果存在这些文件中的任何一个,并且您的登录shell是bash,.profile
则在通过ssh或在文本控制台上登录时不会被读取,但是仍然可以读取它,而不是.bash_profile
从GUI登录。另外,如果没有.bash_profile
,请使用.bashrc
。
如果已将zsh设置为登录shell,请使用~/.zprofile
代替~/.profile
。
如果您使用的是tcsh,请添加
setenv ABC "123"
在.login
文件(${HOME}/.login
)中
如果使用的是其他Shell,请参阅Shell手册,了解如何定义环境变量以及在Shell启动时执行哪些文件。
su user
是将当前外壳的所有权更改为用户名arg,同时保留调用用户的主目录和环境。要以某种方式进入外壳程序并成为新用户并获得其所有环境设置($ PATH,$ HOME,$ ABC等),您需要传递-作为su的第一个参数。 su - username
会满足您的要求。
man su
)
su
首先呢?您是否只是创建了一个用户.profile
无法使用的根拥有者?
.profile
所有兼容Bourne的外壳程序都读取了Bash语法,所以您不应在该文件中编写Bash语法。特别是,export VARIABLE=value
需要将其重构为VARIABLE=value; export VARIABLE
。
使用/etc/environment
文件来设置环境变量。然后在/etc/environment
文件中添加以下行。
ABC="123"
现在,可以从所有用户会话访问ABC变量。要测试变量输出,请先使用命令刷新环境变量
source /etc/environment
然后跑echo $ABC
。
/etc/environment
它不支持完整的bash语法,这是我很难解决的问题。例如,放置PATH="/usr/bin:/usr/sbin"
然后PATH="$PATH:/foo/bar"
在下一行上执行将不起作用
/etc/environment
即使重新启动bash终端或键入,我也必须在设置此设置后重新启动操作系统source /etc/environment
。因此,如果遇到环境变量无法永久保存的问题,请尝试重新启动。
这是一个通用过程,几乎可以用于任何shell。无论如何,您都必须知道用户通常使用哪个shell登录:
path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"
然后,您必须确定此外壳程序通常会读取哪些点文件:
man $shell
一种可行的快捷方式是列出包含外壳程序名称的那些点文件:
ls ~/.*${shell}*
如果要检查登录期间是否实际读取了其中一个文件,则可以简单地在每个文件中打印文件名,例如:
echo .bashrc
登录时,您应该查看正在读取的文件,然后可以决定修改哪个文件。注意不要使用echo "$0"
或类似方法,因为的值$0
取决于外壳处理点文件的方式,并且可能会引起误解。
当涉及到“永久”声明变量时,请注意,这仅扩展到会话。没有会话就无法访问变量的值,因此它在一个变量之外没有任何意义。如果您的意思是“只读”,那就是外壳相关的,在Bash中,您可以使用:
declare -r VAR
如果它已经具有值,或者
declare -r VAR=value
同时分配它。并非所有的外壳程序都具有此功能。
要在大多数shell中声明一个变量,应使用变量名([A-Za-z_][A-Za-z0-9_]*
),后跟一个等号(等号周围没有空格),然后是一个值(除非该值是simple,否则最好加引号[A-Za-z0-9_]+
)。例如:
name="John Doe"
ip=127.0.0.1
HORRIBLE=1
对我有用的最好方法是在BASH shell中修改.bashrc文件。
例如使用此:
添加此行:
export <VARIABLE> = "<ANY PATH/VALUE you want>"
例如: export HOME = "/home/user/"
请记住使用,""
因为使用' '
将无法正常工作,并且您的bashrc文件将在采购时报告错误。
在当前会话中获取它。
我还尝试修改/ etc / environment文件,但是它不允许我创建新的环境变量,当我获取它时,它提示错误,找不到定义的变量。