Kie*_*ron 97
和/etc/profile
其他人提到的一样,一些Linux系统现在使用一个目录/etc/profile.d/
; 其中的任何.sh
文件都将来自/etc/profile
.将自定义环境保存在这些文件中比仅编辑更简洁/etc/profile
.
小智 43
如果你的LinuxOS有这个文件:
/etc/environment
Run Code Online (Sandbox Code Playgroud)
您可以使用它为所有用户永久设置环境变量.
摘自:http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
Dig*_*oss 16
令人惊讶的是,Unix和Linux实际上并没有设置全局环境变量的地方.您可以做的最好的事情是安排任何特定的shell进行特定于站点的初始化.
如果你把它放入/etc/profile
,那将解决大多数与posix兼容的shell用户的问题.对于非关键目的,这可能"足够好".
但任何有shell csh
或tcsh
shell的人都不会看到它,我不相信csh
有一个全局初始化文件.
来自bash手册页的一些有趣的摘录:
当bash作为交互式登录shell或具有该
--login
选项的非交互式shell调用时,它首先从该文件读取并执行命令/etc/profile
(如果该文件存在).读取文件后,它会寻找~/.bash_profile
,~/.bash_login
和~/.profile
,按照这个顺序读取并执行从存在并且可读的第一个命令.--noprofile
启动shell以禁止此行为时可以使用该选项.
...
当一个交互的shell但不是登录shell启动时,bash读取并执行命令/etc/bash.bashrc
和~/.bashrc
,如果这些文件存在.使用该--norc
选项可以禁止这一点.该--rcfile
文件选项将强制bash读取和文件,而不是执行命令/etc/bash.bashrc
和~/.bashrc
.
所以看看/etc/profile
或者/etc/bash.bashrc
,这些文件是全局设置的正确位置.在它们中加入这样的东西来设置环境变量:
export MY_VAR=xxx
Run Code Online (Sandbox Code Playgroud)
在 Linux 内核下运行的每个进程都有自己独特的环境,它从其父进程继承而来。在这种情况下,父进程要么是一个 shell(产生一个子 shell),要么是“登录”程序(在一个典型的系统上)。
由于每个进程的环境都受到保护,因此无法为每个正在运行的进程“注入”环境变量,因此即使您修改了默认的 shell .rc/profile,它也不会生效,直到每个进程退出并重新加载它的启动设置。
查看 /etc/ 以修改任何特定 shell 的默认启动变量。只要意识到用户可以(并且经常这样做)在他们的个人设置中更改它们。
Unix 旨在在限制范围内服从用户。
注意:Bash 不是您系统上唯一的shell。请仔细注意 /bin/sh 符号链接实际指向的内容。在许多系统上,这实际上可能是dash,这是(默认情况下,没有特殊调用)POSIXLY 正确的。因此,您应该注意修改这两个默认值,否则以 /bin/sh 开头的脚本将不会继承您的全局默认值。同样,在编辑两者时注意避免只有bash理解的语法,也就是avoiding bashisms
.
归档时间: |
|
查看次数: |
206387 次 |
最近记录: |