x.sh
我在目录中创建了一个名为的文件,/etc/profile.d/
因此所有用户都应该可以访问它。我期望当我使用命令在终端(已登录用户)中更改当前用户时sudo su other_user
,我在文件中设置的那些变量x.sh
应该可以访问,但事实并非如此。如何设置变量以使其按我的意愿可访问?
答案1
/etc/profile
(因此/etc/profile.d
)被读取用于登录 shell。sudo su other_user
不运行登录 shell。这是一种不好的做法,它会让环境受到原始用户变量的污染。您应该改为执行以下命令之一:
sudo -iu other_user
sudo su - other_user
这两者都会加载,/etc/profile
因为它们启动了登录 shell,并且都以相对干净的环境启动。
不过,理想情况下,如果可能的话,应该设置变量/etc/environment
。该文件应该可由 读取su
,因此无论是否启动登录 shell,其中的变量都可用。但是,该文件不支持 shell 语法,因此如果您需要复杂的 shell 代码来设置变量,则无法使用它。