通配符未被替换

通配符未被替换
#!/bin/bash
loc=`echo ~/.gvfs/*/DCIM/100_FUJI`
rm -f /mnt/fujifilmA100
ln -s "$loc" /mnt/fujifilmA100

由于某种原因,变量 * 没有被替换为唯一可能的值,而是被赋予了值 /home/chris/.gvfs/*/DCIM/100_FUJI。有人知道为什么吗?

请注意:

  • 如果全局扩展失败,则不会替换该模式。我运行了以下命令:

    chris@comp2008:~$ loc=``echo ~/.gvfs/*/DCIM/100_FUJI

    chris@comp2008:~$ echo $loc

    /home/chris/.gvfs/gphoto2 安装在 usb%3A001,008/DCIM/100_FUJI 上

    所以我们可以看到扩展应该有效

  • 我现在已经切换到使用:

    loc =``查找〜/ .gvfs -name 100_FUJI

    我只是好奇为什么它不能按原样工作。

  • 使用 sh -x 调试输出

回显/home/chris/.gvfs/*/DCIM/100_FUJI

位置=/主页/克里斯/.gvfs/*/DCIM/100_FUJI

rm -f /mnt/fujifilmA100

ln -s /home/chris/.gvfs/*/DCIM/100_FUJI/mnt/fujifilmA100

答案1

您在回复 Tactical Vim 时提到,您在 sudo 下运行它 -- ' ~' 在 sudo 下和在普通用户下会以不同的方式展开。将其更改为 ' ~chris' 或对您的主目录进行硬编码。

答案2

您确定您输入的 .sh 文件与此处显示的完全相同吗?我刚刚编写了一个测试脚本,其功能与您完全相同,并且对我有用。

也许与带有空格、%符号和逗号的奇怪目录名称有关?

答案3

尝试在“sh -x”下运行脚本以查看一些调试输出,也许它会提供一些线索。我从未见过以这种方式使用 echo,它可能与此有关;如果您将“echo”替换为“ls -d”(或类似,不确定您的输出),它会起作用吗?

答案4

好的,我修改了我的脚本如下:

loc=`echo ~chris/.gvfs/*/DCIM/`
sudo rm -f /mnt/camera
sudo ln -s "$loc" /mnt/camera

请注意,sudo 位于脚本内部

相关内容