Как избежать знака @в поле пароля URL-адреса smb://

Я пытаюсь написать bash script, в котором я подключаюсь к серверу samba, получая имя пользователя и пароль, а затем указывая $username: $password @SERVERNAME.

Однако это не удастся, если пароль имеет @в нем. Есть ли способ избежать @из пароля в bash?

Заранее спасибо

Обновление: Я настраиваю этот сетевой принтер

lpadmin -p PRINTER -v smb://$username:[email protected] -E

и он работает, за исключением случая, когда $password имеет знак @; переменные $username и $passwords получают от чтения stdin

Ответ 1

А, нет, на самом деле это не вопрос цитирования для Bash, а цитирование для Samba. У вас есть следующее:

lpadmin -p PRINTER -v smb://$username:[email protected] -E

который Bash покорно расширяется до

lpadmin -p PRINTER -v smb://alice:[email protected]@SERVER -E

а затем клиентская библиотека Samba думает, что пароль заканчивается с первого знака @и он должен подключаться к серверу с именем [email protected], неважно, что вы не можете на самом деле поместить это имя в DNS.

lpadmin происходит от CUPS, а не от Samba (вот его manpage) и, читая эти документы немного, я думаю вы можете использовать этот альтернативный синтаксис:

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

Я удивлен, убегая @, поскольку %40 не работает. Похож на ошибку в библиотеке клиента samba для меня.

Ответ 2

Я использую администраторы чашек в http://localhost:631/ для добавления принтеров. Кодировка @как% 40 работала для меня.