/ etc / environmentのエスケープマーク(#)


17

env変数を追加しています/etc/environmentが、変数値に#記号が含まれているため、文字列がストライプされます。

MYSQL_PWD="something#no"

今、env上記のコードを実行すると、yieldsになりMYSQL_PWD=somethingます。ハッシュをエスケープするにはどうすればよいですか?私はすでに\キャラクターを試しました。


あなたが入れているのとまったく同じものを投稿していると確信しています/etc/environmentか?Debian Wheezyでこの動作を再現できなかったからです。
ジョセフR.

申し訳ありませんが、エクスポートはありません。私の質問を更新しました。
Umair A.

今のところ、MySQL pwd :(
Umair A.

私はあなたの行動を複製することができました。シェルを読むためにログアウトしてからログインする必要があることに気づかなかった/etc/environment
ジョセフR.

@JosephR。-私はこれを複製し、同様に驚きました。このファイルの役割を見ると、意図と一致しているようです。
slm

回答:


18

これはで可能ではないよう/etc/environmentです。これは、シェルに依存しない変数の共通の場所として意図されています。これを考えると、ハッシュマーク(#)を含む文字列をサポートしているようには見えず、それらをエスケープする方法がないようです。

このSF Q&Aタイトル「Linux etc / environmentで先頭の「#」文字を適切にエスケープする方法」を見つけました。これらの方法はどれも機能しませんでした:

  • control = "hello"
  • test0 = "#hello"
  • test1 = "h \ #ello"
  • test2 = "h#ello"
  • test3 = "h //#ello"
  • test4 = "h /#ello"
  • test5 = h#ello
  • test6 = h \ #ello
  • test7 = h#ello
  • test8 = h //#ello
  • test9 = h /#ello
  • test10 = 'h#ello'
  • test11 = 'h \ #ello'
  • test12 = 'h#ello'
  • test13 = 'h //#ello'
  • test14 = 'h /#ello'

その質問に対する受け入れられた答えと私のアドバイスも何ですか:

まあ、それはあなたがやりたいトリッキーなもの/etc/environmentはシェル構文ではなく、1つのように見えますが、そうではありません。背後/etc/environmentにあるアイデアは素晴らしかった。変数を設定するシェルに依存しない方法!わーい!しかし、実際的な制限により、役に立たなくなります。

そこに変数を渡すことはできません。たとえば、試してみてMAIL=$HOME/Maildir/何が起こるか見てみましょう。悲しいかな、どんな目的にも使用しようとするのをやめるのがベストです。そのため、シェルで処理された場合にできると期待することはできません。

/etc/profileまたはを使用し/etc/bashrcます。

まだ別のQ&Aは、これがなぜそうなのかについてこの合理的説明を与えました:

/etc/environment#(コメントとして扱われる)をエスケープする方法はありません。PAMモジュール "pam_env"によって解析され、KEY = VALペアの単純なリストとしてそれを処理し、それに応じて環境を設定します。これはbash / shellではなく、パーサーには変数の展開や文字のエスケープを行うための言語がありません。

参照資料


それはバグですか、またはその背後に何らかの理由がありますか?
Umair A.

1
@UmairAshraf-バグではなく、このファイルの役割を考えると機能が制限されているだけです。複数のシェルテクノロジー間このファイルは、スパン、それはそれはで使用されるすべてのシェルでサポートされている機能で行かなければならないので。
SLM

なんてばかげている; これは単にと同じ形式を使用する必要があります/proc/environ
カズ

1

おそらく手遅れですが、 #、私のために働く前に3つのバックスラッシュ

パスワードが「admin#123」の場合、次のように定義できます。

admin\\\#123

これは/etc/environmentファイル内では機能しませんでした。
ジョーイV.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.