Ali*_*EXE 2 sudo environment-variables
我有一个脚本可以导出一些变量,并在某些地方使用sudo.
这是一个简单的例子:
export Name=John
sudo envsubst < SourceFile > TargetFile
Run Code Online (Sandbox Code Playgroud)
如果SourceFile有一个$Name变量,那么它将被打印为空。
如果我删除sudo它就可以了。
是否export对所有用户通用?如何导出整个机器的变量?
Sté*_*las 10
默认情况下,sudo清除其环境,除了作为安全措施传递的一些经过清理的变量(以及一些明确设置为正常值的变量)。
如果 sudo 配置允许,您可以使用-E/--preserve-env变量来解决这个问题。
无论如何,环境变量,如命令参数,是在执行时从一个命令传递到另一个命令的东西,它不是存在于每个进程访问的某个虚幻空间中的东西(为此,有文件系统),所以导出整个机器的变量没有意义。
此外,该envsubst命令不需要任何特殊权限,因此将其作为root. 如果您这样做是为了尝试打开源文件或将目标文件创建为root,那么这是错误的,因为:
Run Code Online (Sandbox Code Playgroud)sudo envsubst < SourceFile > TargetFile
重定向是由 shellsudo以原始用户身份调用来完成的。
这是一个打开您需要运行的文件的命令root:
sudo cat SourceFile | envsubst | sudo sh -c 'exec cat > TargetFile'
Run Code Online (Sandbox Code Playgroud)
这里用于cat打开(读取和传递)SourceFile,以及sh打开TargetFile(并向cat其中写入数据)。
如果在 GNU 系统上,你还可以这样做:
sudo dd bs=64k status=none if=SourceFile |
envsubst |
sudo dd bs=64k status=none of=TargetFile
Run Code Online (Sandbox Code Playgroud)
请参阅Unix 是否有从 stdin 读取并写入文件的命令(如 tee 而不将输出发送到 stdout)?了解详细信息和其他方法。
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |