转义mount命令中的特殊字符

时间:2014-11-19 20:16:31

标签: macos bash escaping mount smb

我正在尝试在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

根据我的发现,$和!需要逃脱。需要有关如何逃避特殊字符的帮助。顺便说一句,仅使用没有域的用户名似乎适用于第一种情况

5 个答案:

答案 0 :(得分:4)

单引号转义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

答案 1 :(得分:3)

只需对特殊字符进行编码即可。

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

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

e.g。

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

然后这应该适合你:

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

使用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

答案 4 :(得分:0)

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