11

ユーザー名とパスワードを取得し、$username:$password@SERVERNAME と言って、samba サーバーに接続する bash スクリプトを作成しようとしています。

ただし、パスワードに @ が含まれている場合、これは失敗します。bash でパスワードから @ をエスケープする方法はありますか?

前もって感謝します

更新: このネットワーク プリンターをセットアップしています

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

$password に @ 記号が含まれている場合を除いて機能します。$username および $passwords 変数は、stdin の読み取りから取得されます

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に入力できないことを気にしないでください。

lpadminSamba(ここにそのマンページがあります)からではなく、CUPSから来ており、それらのドキュメントを少し読んで、この代替構文を使用できるかもしれないと思います:

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

でも、うまくいかないので逃げ@てびっくりしました。%40私には、Sambaクライアントライブラリのバグのように見えます。

于 2010-09-01T01:43:01.943 に答える
3

http://localhost:631/で cups admin を使用してプリンターを追加します。@ を %40 としてエンコードするとうまくいきました。

于 2011-04-01T15:59:13.083 に答える