导出变量,使其出现在通过 sudo 获取的脚本中

导出变量,使其出现在通过 sudo 获取的脚本中

我有一个 bash 脚本,其中有一个作为sudo.
变量在此脚本中声明。
然后它获取另一个commands.sh脚本,但是该脚本sudo在获取脚本时会返回到普通用户 commands.sh

文件:main.sh

#!/bin/bash

user=ubuntu
export $user

sudo -u $user bash -c "source includes-shared/commands.sh"

文件:includes-shared/commands.sh

# debug command to see if $user is available
printenv
[ more commands...]

该变量$user不再出现在此commands.sh脚本中,即它对printenv其他命令不可见。
如何导出$user以便源脚本可以使用它?

答案1

您需要针对变量名称运行导出。现在,该变量在导出看到它之前被引用和替换。

改成这样:

export user

注意缺少$

您当前的版本基本上是这样的:

export ubuntu

因为$user首先被解释。

使用 sudo 时,您还会丢失环境变量。有两种方法可以保存它们。要么保留你的整个环境

sudo -E -u $user command

或者只保留您需要的变量

sudo user=$user -u $user command

相关内容