我有一个 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