我正在尝试编写一个 bash 脚本,在其中连接到 samba 服务器,方法是获取用户名和密码,然后输入 $username:$password@SERVERNAME。
但是,如果密码中有@,这将失败。有没有办法将 bash 中的密码中的 @ 转义?
提前致谢
更新: 我正在设置此网络打印机
lpadmin -p PRINTER -v smb://$username:$password@SERVER -E
它可以工作,除非 $password 中有一个 @ 符号; $username 和 $passwords 变量是通过读取标准输入获得的
最佳答案
啊,不,这实际上不是为 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 客户端库中的错误。
关于bash - 如何在 smb ://URL 的密码字段中转义 @ 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3614444/