下面是一个简单的脚本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"