如何在smb:// URL的密码字段中转义@符号

时间:2010-09-01 01:27:52

标签: bash samba escaping

我正在尝试编写一个bash脚本,在其中我连接到samba服务器,获取用户名和密码,然后说$ username:$ password @ SERVERNAME。

但是,如果密码中包含@,则会失败。有没有办法逃脱bash中的@ out密码?

提前致谢

更新: 我正在设置这个网络打印机

lpadmin -p PRINTER -v smb://$username:$password@SERVER -E

并且除了$ password中有@符号的情况外,它有效; $ username和$ passwords变量来自读取stdin

2 个答案:

答案 0 :(得分:7)

啊,不,这实际上不是引用Bash,而是引用Samba。你有这个:

lpadmin -p PRINTER -v smb://$username:$password@SERVER -E

Bash尽职尽责地扩展到

lpadmin -p PRINTER -v smb://alice:passw@rd@SERVER -E

然后 Samba客户端库认为密码在第一个@符号结束,它应该连接到名为rd@server的服务器,不要紧,你实际上不能把它DNS中的名称。

lpadmin来自CUPS,而不是来自Samba(here is its manpage),稍微阅读这些文档,我想您可以使用这种替代语法:

lpadmin -p PRINTER -U "${username}%${password}" -v smb://SERVER -E

我很惊讶逃避@因为%40不起作用。看起来像samba客户端库中的一个错误。

答案 1 :(得分:3)

我使用http://localhost:631/处的杯子管理员添加打印机。编码@ as%40为我工作。