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

Faz*_*bbi 1 shell environment-variables

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

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

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

怎么解决呢?

Kus*_*nda 5

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

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

sudo runuser -l test2 -c "touch /home/test2/$user.file"
Run Code Online (Sandbox Code Playgroud)

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

sudo -u test2 touch "/home/test2/$user.file"
Run Code Online (Sandbox Code Playgroud)