我需要在 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 的用户sh
和bash
/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
这一环境将保留csh
在tcsh
$ csh
admin@test_01:~ % echo $NODE_ENV
production
它还将保存su
$ su
root@test_01:/home/admin # echo $NODE_ENV
production
和中没有export
命令。这解释了错误csh
tcsh
$ csh
admin@test_01:~ % source /etc/profile
NODE_ENV=production: Command not found.
export: Command not found.
具有默认 shell 的用户csh
和tcsh
/etc/csh.cshrc
是设置csh
和 的全局环境的正确位置tcsh
。例如
root@test_01:~ # cat /etc/csh.cshrc
setenv NODE_ENV production
默认 shellroot
是csh
root@test_01:~ # grep root /etc/passwd
root:*:0:0:Charlie &:/root:/bin/csh
这将设置环境
root@test_01:~ # echo $NODE_ENV
production