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
. 这意味着进入 的test2
shell 环境后,该$user
变量没有得到解析。
怎么解决呢?
$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)