eval
ステートメントの一部としてステートメントをファイルに追加するときにステートメントを評価しないようにするにはどうすればよいですかcat << __EOF__
。
長い話を短く
私は複数のLinuxサーバーでサービスを管理しています。多くの場合、割り当てられた基本的な端末の色が頭を痛めるため、端末に貼り付けてLS_COLORS
色の問題を解決するクイックスクリプトを作成しました。このスクリプトは次のとおりです。
cat >> ~/.dircolors << __EOF__
OTHER_WRITABLE 01;30;41 # dir that is other-writable (o+w) and not sticky
__EOF__
cat >> ~/.bashrc << __EOF__
# Customize directory listing colors.
eval `dircolors ~/.dircolors`
export LS_COLORS
__EOF__
eval `dircolors ~/.dircolors`
これは私が指定したセッションで正常に機能しますが、再度ログインすると次のエラーが発生します。
-bash: 30: command not found
-bash: 41:: command not found
[me@myserver ~]$
.bashrc
あなたの中には、私が私を見たとき、最後の4行が次のようになることに気づいたかもしれません。
# Customize directory listing colors.
eval LS_COLORS='ow=01;30;41:';
export LS_COLORS
export LS_COLORS
しかし、もう一度変更すると、次のようになります。
eval `dircolors ~/.dircolors`
次にログインすると、すべてがうまく機能します。
ベストアンサー1
ここで評価される内容は ですeval
。eval
スクリプトの単語は完全に非アクティブです。結局のところ、出力に表示されることがわかります。
評価されるのはコマンド置換(バックティック部分)です。ファイルに書き込まれたテキストにリテラルバックティックを含めるには、バックスラッシュで保護します。
cat >> ~/.bashrc << __EOF__
# Customize directory listing colors.
eval \`dircolors ~/.dircolors\`
export LS_COLORS
__EOF__
または、この文書を変数とコマンドの置換を実行するのではなく、テキストをそのまま使用するテキスト文書にします。演算子の後ろにある閉じたタグ部分を引用してください<<
。
cat >> ~/.bashrc <<\__EOF__
# Customize directory listing colors.
eval `dircolors ~/.dircolors`
export LS_COLORS
__EOF__