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

标签 bash samba escaping

我正在尝试编写一个 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/

相关文章:

linux - bash 使用 echo 防止转义

bash - 使用docker exec将带有转义字符的参数传递给脚本

bash - 如何使用 GNU Parallel 解释 CSV 列中字符串值中的 Shell 变量?

linux - Samba 给出 "Function not implemented"错误

php - 同一目录包含在使用 PHP 的 Fedora 服务器上失败

php - 如何使用 PHP 运行 PostgreSQL LIKE 查询

bash - 如何防止bash中for循环中的文件名扩展

bash - Bash 脚本中的 for 循环在处理第一行后退出

linux - 如何将 shell 脚本变量导出到子脚本?

linux - Linux Fedora 26中如何使用samba挂载共享文件夹