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变量没有得到解析。
怎么解决呢?
$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)