在 FreeBSD jail 中 – 设置全局环境变量

在 FreeBSD jail 中 – 设置全局环境变量

我需要在 FreeBSD jail 中设置系统范围的环境变量(即 NODE_ENV=production)。

我确实尝试在 /etc/profile 中设置它,但是当我获取它时

root@www:/ # source /etc/profile

我有

export: Command not found.

它在主机系统上运行。

我也尝试过将其设置为 /.chsrc。但是这只会使该变量对 root 用户可用,而不会对 jail 中的其他用户可用。

答案1

问:“在 FreeBSD jail 中设置系统范围的环境变量。”

/etc/profile答:在和中设置变量/etc/csh.cshrc


细节

引自3.9. 壳

不同 shell 设置环境变量的方式不同。在 tcsh(1) 和 csh(1) 中,使用 setenv 设置环境变量。在 sh(1) 和 bash 中,使用 export 设置当前环境变量。


以下所有例子均在监狱中执行

FreeBSD test_01.example.org 12.0-RELEASE FreeBSD 12.0-RELEASE r341666 GENERIC  i386

具有默认 shell 的用户shbash

/etc/profile是设置全局环境的正确位置。例如

$ cat /etc/profile
NODE_ENV=production;    export NODE_ENV

引自简介(4)

所有使用 shell sh(1) 作为登录命令的用户都会将这些文件中的命令作为其登录序列的一部分执行。

例如,用户admin

$ grep admin /etc/passwd
admin:*:1001:1001:User &:/home/admin:/bin/sh

执行/etc/profile “作为登录序列的一部分”并设置环境

$ echo $NODE_ENV
production

这一环境将保留cshtcsh

$ csh
admin@test_01:~ % echo $NODE_ENV
production

它还将保存su

$ su
root@test_01:/home/admin # echo $NODE_ENV
production

和中没有export命令。这解释了错误cshtcsh

$ csh
admin@test_01:~ % source /etc/profile
NODE_ENV=production: Command not found.
export: Command not found.

具有默认 shell 的用户cshtcsh

/etc/csh.cshrc是设置csh和 的全局环境的正确位置tcsh。例如

root@test_01:~ # cat /etc/csh.cshrc
setenv NODE_ENV production

默认 shellrootcsh

root@test_01:~ # grep root /etc/passwd 
root:*:0:0:Charlie &:/root:/bin/csh

这将设置环境

root@test_01:~ # echo $NODE_ENV
production

相关内容