您将如何设置正确的环境变量以及使用 su 时应设置的任何其他设置 -用户名命令,但没有连字符?
IE
如果我使用
su - fooUser
运行不带连字符的 su 后,如何模拟上述操作?
su foo用户
我需要在这里运行什么来设置所有配置以及连字符设置的所有其他内容?
答案1
简短的回答是:你不能。
更长、更正确的答案:您可以将所有内容从/etc/profile
和等价移动/etc/bashrc
到和等价(详细信息取决于您使用的 shell),并让前者来源于后者;这样会让您尽可能接近(但需要注意的是,某些内容可能需要额外的 if/elif/fi 测试来确定是否应该为登录 shell 运行)。
额外的连字符是“-l”或“--login”的简写,它告诉su(1)
如何调用 shell:按照惯例,如果 shell 的argv[0]
名称为“登录”,则它知道它是一个“登录”shell。告诉它被启动为,不需要像二进制文件名那样)以破折号开头;例如,bash 会发现自己“被调用”-bash
或-/bin/bash
。您可以通过登录控制台并运行来确认这一点ps o pid,comm,args $$
- “args”将以破折号开头。登录 shell 使用一组不同的启动文件,这是主要区别;有关详细信息,请参阅您的 shell 的手册页(例如bash 调用)。在 bash 启动之前设置的环境还有一些微妙之处,但这些都可以在这些启动文件中修复。
此时,退一步思考一下很有用:您要解决什么问题?改变身份不应该是您经常做的事情;如果您发现自己需要这样做,您应该尝试找出如何解决您试图做的根本问题,而不是要求这样做。