将变量值传递给另一个用户的 shell

将变量值传递给另一个用户的 shell

下面是一个简单的脚本a.sh

#name: a.sh
user=$(whoami)
sudo runuser -l test2 -c 'touch /home/test2/$user.file'

我正在尝试保存当前用户的用户名,该用户名位于test1变量中user,并在目录中创建一个文件/home/test2作为 user test2。脚本返回时没有错误,但没有生成test1.file/home/test2.环顾四周后,我发现有一个.file名为/home/test2.这意味着进入test2的 shell 环境后,该$user变量没有得到解析。

怎么解决呢?

答案1

$user命令行上的扩展sudo发生在touch命令执行之前。在该时间点处于活动状态的环境中(很可能已被 清除sudo),其值未定义,因此扩展为空字符串。这是您获取调用文件.file的地方。

要创建具有正确名称的文件,请在touch命令周围使用双引号。这将确保$user扩展 sudo被调用:

sudo runuser -l test2 -c "touch /home/test2/$user.file"

注:我不知道runuser是什么。我会用

sudo -u test2 touch "/home/test2/$user.file"

相关内容