在 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 特殊字符吗?