这让我很恼火。我看到了几个建议(都使用不同的文件和语法),但没有一个起作用。
如何为特定用户设置环境变量?我在 Debian 上挤压。我应该在文件中放入 ABC = "123" 的确切语法是什么?
答案1
您必须将声明放入 shell 的初始化文件中:
如果您使用 bash、ash、ksh 或其他一些 Bourne 风格的 shell,您可以添加
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 启动时执行哪些文件。
答案2
使用/etc/environment
文件设置环境变量。然后在文件中添加以下行/etc/environment
。
ABC="123"
现在ABC变量可以从所有用户会话访问。要测试变量输出,首先使用命令刷新环境变量
source /etc/environment
并运行echo $ABC
。
答案3
这是一个通用过程,几乎可以用于任何 shell。无论如何,您必须知道用户通常使用哪个 shell 登录:
path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"
然后你必须弄清楚这个 shell 通常会读取哪些点文件:
man $shell
可能有效的快捷方式是列出包含 shell 名称的点文件:
ls ~/.*${shell}*
如果您想检查登录期间是否实际读取了其中一个文件,您可以简单地打印每个文件中的文件名,例如:
echo .bashrc
登录时,您应该会看到正在读取哪些文件,然后您可以决定修改哪个文件。请注意,您不应该尝试使用echo "$0"
或类似的值,因为 的值$0
取决于 shell 处理点文件的方式,并且可能会产生误导。
当涉及“永久”声明变量时,请注意这仅扩展到会话。没有会话就无法访问变量的值,因此它在会话之外没有任何意义。如果你的意思是“只读”,那就是依赖于 shell 的,并且在重击您可以使用:
declare -r VAR
如果它已经有一个值,或者
declare -r VAR=value
同时分配它。并非所有 shell 都具有此功能。
要在大多数 shell 中声明变量,您应该使用变量名 ( [A-Za-z_][A-Za-z0-9_]*
),后跟等号(和没有空间等号周围),然后是一个值(最好加引号,除非该值是简单的[A-Za-z0-9_]+
)。例如:
name="John Doe"
ip=127.0.0.1
HORRIBLE=1
答案4
确切的命令是:
echo 'export ABC = "123"' >> ~/.profile