sudo 导致 envsubst 打印空输出

sudo 导致 envsubst 打印空输出

我有一个脚本可以导出一些变量,并在某些地方使用sudo.

这是一个简单的例子:

export Name=John
sudo envsubst < SourceFile > TargetFile

如果其中SourceFile$Name变量,那么它将被打印为空。

如果我删除sudo它就可以了。

是否export对所有用户通用?如何导出整个机器的变量?

答案1

默认情况下,sudo清除其环境,除了作为安全措施传递的一些已清理的变量(以及一些明确设置为正常值的变量)之外。

如果 sudo 配置允许,您可以使用-E/--preserve-env变量来解决这个问题。

无论如何,环境变量,如命令参数,是在执行时从一个命令传递到另一个命令的东西,它不是存在于每个进程访问的某个虚幻空间中的东西(为此,有文件系统),所以出口整个机器的变量没有意义。

此外,该envsubst命令不需要任何特殊权限,因此将其作为root.如果您这样做是为了尝试打开源文件或将目标文件创建为root,那么这是错误的,因为:

sudo envsubst < SourceFile > TargetFile

重定向是由 shellsudo以原始用户身份调用来完成的。

这是一个打开您需要运行的文件的命令root

sudo cat SourceFile | envsubst | sudo sh -c 'exec cat > TargetFile'

这里用于cat打开(读取和传递)SourceFile,以及sh打开TargetFile(并向cat其中写入数据)。

如果在 GNU 系统上,你还可以这样做:

sudo dd bs=64k status=none if=SourceFile |
  envsubst |
  sudo dd bs=64k status=none of=TargetFile

Unix 是否有从 stdin 读取并写入文件的命令(例如 tee 而不将输出发送到 stdout)?了解详细信息和其他方法。

相关内容