我有一个命令来挂载cifs
文件共享。共享路径和挂载点在 bash 脚本中添加了变量,如下所示;
sudo mount -t cifs -o user="$USERNAME",cruid="$USERNAME",sec=krb5 "$FILEPATH" "$DFS_MOUNT"
但是,运行脚本时命令失败了?我只能假设这是由于在运行脚本时添加了单引号而导致的,以便bash -x
检查它?
最终看起来像;
sudo mount -t cifs -o user=chris,cruid=chris,sec=krb5 '//toolshed/Windows/Utilities/Uninstall\ Problems\ Fixit' /home/chris/fixit
哪些原因会导致出现“未找到路径”的故障?
因为如果我运行命令;
sudo mount -t cifs -o user=chris,cruid=chris,sec=krb5 //toolshed/Windows/Utilities/Uninstall\ Problems\ Fixit /home/chris/fixit
它工作正常
答案1
它看起来$FILEPATH
扩展为一个包含反斜杠()的字符串\
,这些反斜杠看起来好像是为了转义后面的空格。
双引号$FILEPATH
被变量值替代,不会进行进一步的分词。其内容。即使不加引号,这些反斜杠在变量扩展后也不会转义空格。
bash -x
显示添加了单引号的命令,以减少歧义。单引号是给您的,mount
我没有看到它们。但是,反斜杠被发送到,mount
因为它们在变量的内容中。这样,该工具请求了一个不存在的路径。
正确的做法是首先分配文字字符串:
FILEPATH='//toolshed/Windows/Utilities/Uninstall Problems Fixit'
然后使用双引号中的变量(如您所做的那样)"$FILEPATH"
:。
请注意这也会起作用:
FILEPATH=//toolshed/Windows/Utilities/Uninstall\ Problems\ Fixit
但是这些反斜杠现在在解析赋值时转义空格,它们不会保留到变量内容中。对您有用的命令中未加引号的反斜杠以相同的方式解析,它们没有保留到mount
。
您的问题是反斜杠在变量的内容中。也许您做了类似的事情:
FILEPATH='//toolshed/Windows/Utilities/Uninstall\ Problems\ Fixit'# 您的案例是错误的