脱出する方法!パスワードで?


24

パスワードで感嘆符をエスケープするにはどうすればよいですか:

$ mysql -umyuser -pone_@&!two
-bash: !two: event not found

明らかなバックスラッシュを試しても助けにはなりませんでした:

$ mysql -umyuser -pone_@&\!two
[1] 22242
-bash: !two: command not found
name@domain.com [~]# ERROR 1045 (28000): Access denied for user 'myuser'@'localhost' (using password: YES)

私のすべてのGoogle検索は、バックスラッシュが役立つことを示唆していますが、そうではありません。この質問で示唆されるように引用符を使用する方法が全くありません。この行は.bashrcエイリアスで使用されます。心配しないでください、ここに表示されるユーザー名とパスワードは単なる例であり、本番環境では使用されません!


常に一重引用符を使用できます。単一引用符で囲まれた文字列「内の」単一引用符を使用するように、試してみてください''\'
CAS

6
ところで、コマンドラインにパスワードを入力することは、マルチユーザーシステムの潜在的なセキュリティリスクです。実行中のプロセスのコマンドライン引数を調べるのは簡単です。代わりに.my.cnfファイルを使用してください(覚えておいてchmod 600ください)。
cas

おっとっと。それは'\''、ではありません''\'
-cas

ありがとう、クレイグ。実際、これは代替手段よりも安全です。パスワードのコピーを全員に電子メールで送信します。個人的には、各開発/home/user者が独自のmysqlユーザーを持っていることを好みますが、その点で私は意思決定者ではありません。
-dotancohen

2
管理は賢明であり、すべてを知っています:)
cas

回答:


38

次のように、パスワードを単一引用符で囲みます。 -p'one_@&!two'

エイリアスに追加するには、次のようにします。

alias runmysql='mysql -umyuser -p'\''one_@&!two'\'''


1
-pとパスワードの間にスペースはありませんが、はい、これは機能するはず
です-mulaz

すでにスペースを編集しました:)
cas

4
-bash: !two: command not found

また、&文字をエスケープする必要があります。

$ mysql -umyuser -pone_@\&\!two


1

パスワードをbash変数に保存できます。

$ pass='one_@&!two'

次に、コマンド内の変数を置き換えます。

$ mysql -umyuser -p$pass

興味深い答え;)
chapskev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.