11

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

但是,如果密码中包含 @,这将失败。有没有办法在bash中将@从密码中转义?

提前致谢

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

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

它可以工作,除非 $password 中有一个 @ 符号;$username 和 $passwords 变量是通过读取标准输入获得的

4

2 回答 2

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(这里是它的手册页),并且稍微阅读一下这些文档,我认为您可以使用这种替代语法:

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

不过,我很惊讶逃脱@%40行不通的。对我来说,这看起来像是 samba 客户端库中的一个错误。

于 2010-09-01T01:43:01.943 回答
3

我使用http://localhost:631/上的 cups 管理员添加打印机。将 @ 编码为 %40 对我有用。

于 2011-04-01T15:59:13.083 回答