在 mount 命令中转义特殊字符

Posted

技术标签:

【中文标题】在 mount 命令中转义特殊字符【英文标题】:Escape special characters in mount command 【发布时间】:2015-01-17 12:31:05 【问题描述】:

我正在尝试在 Mac OSX Mavericks 上挂载一个 Windows 共享文件夹。一个简单的用户名和密码就可以了

mount -t smbfs //user2:password2@server1.mydomain.com/myproject ~/localmap

在尝试更有效的用户名和密码时,我收到解析 URL 失败的错误。 细节是 用户名:mydomain\user1 密码:A%b$c@d!e#f

尝试的命令是

mount -t smbfs //mydomain\user1:A%b\$c\@d\!e#f@server1.mydomain.com/myproject ~/localmap

根据我的发现,$ 和 !需要逃脱。需要有关如何转义特殊字符的帮助。顺便说一句,在第一种情况下,只使用用户名而不使用域似乎可以工作

【问题讨论】:

我看到您尝试的命令中有转义符 (``)。你遇到了什么错误? 这里是错误信息mount_smbfs: URL parsing failed, please correct the URL and try again: Invalid argument 【参考方案1】:

只需编码您的特殊字符。

@ -> %40
$ -> %24
! -> %21 

其他字符可以在这里找到: http://www.degraeve.com/reference/urlencoding.php

例如

username="someone", password="passw@rd"

那么这应该适合你:

mount -t smbfs //someone:passw%40rd@server/path /Volumes/path

【讨论】:

这对我有用:mount -t smbfs //user:passw\@rd@server/path /volume/path【参考方案2】:

单引号转义shell元字符a semi-colon should separate the domain controller from the credentials,并且可以使用%40在密码中表示@

mount -t smbfs '//mydomain;user1:A%b$c%40d!e#f@server1.mydomain.com/myproject' ~/localmap

【讨论】:

单引号和分号没问题,但密码中的特殊字符仍然给出相同的错误信息。 我怀疑它是@符号,因为它用于将密码与服务器名称分开 是的,哎呀。进行了编辑,试一试。下一级的修复并不漂亮......【参考方案3】:

使用\ 转义特殊符号 如果您想转换一些特殊符号,您可以编写额外的字符串,其中 $1 - 是您为转换提供的参数

user1=$(sed -e "s/+/%2B/g;s/@/%40/g;s/_/%5F/g" <<< "$1")

然后您可以使用" " 并像这样调用转换后的变量$user1

【讨论】:

【参考方案4】:

使用 nodejs 对 url 进行编码可能会很方便:

$ node -e 'console.log(encodeURIComponent("A%b$c@d!e#f"))'
A%25b%24c%40d!e%23f

解码走另一条路:

$ node -e 'console.log(decodeURIComponent("A%25b%24c%40d!e%23f"))'
A%b$c@d!e#f

【讨论】:

【参考方案5】:

请参阅https://serverfault.com/questions/309429/mount-cifs-credentials-file-has-special-character,那里的第一个答案对我有用。基本上,您使用凭据创建一个文件,然后指定该文件而不是您的用户名和密码。

【讨论】:

以上是关于在 mount 命令中转义特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

在正则表达式中转义特殊字符

我可以在 JavaScript 中转义 HTML 特殊字符吗?

我可以在 JavaScript 中转义 HTML 特殊字符吗?

在雪花程序中转义特殊字符

如何在 oracle 中转义特殊的正则表达式字符?

如何在 JSON 中转义特殊字符