シェルコマンドのHeredoc出力にバックティック(`)を追加する

シェルコマンドのHeredoc出力にバックティック(`)を追加する

PS1="..."設定しているシェルスクリプトにcmdプロンプト修飾子を追加する必要があります。問題は、バックティックを使用してメインコマンドの前にコマンドを実行することです。

sudo tee ~/.bashrc <<EOF

# Display absolute path in cmd line, cmds on new line
PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h [\u]\[`tput sgr0`\]:$PWD\n\$ '

EOF

cat ~/.bashrc以下を提供します。

# Display absolute path in cmd line, cmds on new line
PS1='\[\]\h [\u]\[\]:/Users/myuser/Library/Application Support/Sublime Text 3/Packages/User\n$ '

nano ~/bashrc以下を提供します。

PS1='\[^[[32m\]\h [\u]\[^[(B^[[m\]:/Users/myuser/Library/Application Support/Sublime Text 3/Packages/User\n$ '

これは明らかに、バックティック内のすべての内容が正しく読み取られていないことを意味します。バックティックをエスケープしたり、シェルを使用してバックティックを含む行をファイルに書き込むにはどうすればよいですか?

答え1

ここでドキュメントに書いている間、シェルは次のことを行います。パラメータ拡張$PWD例:スクリプトを解析するときに現在のディレクトリに展開されるパス)コマンドの置き換え(この文書を解析すると「バックティック」が実行され、このコマンドで生成されたすべての内容がその場所に挿入されます。)算術拡張(あなたの場合も同じです)。

これを望まない場合、つまりこの文書の内容をそのまま渡したい場合は、次のようにします。

tee -a "$HOME/.bashrc" <<'EOF'

# contents of here-document here

EOF

最初の行の周りのアポストロフィは、EOFシェルがドキュメント自体のどれも拡張するのを防ぎます。

関連情報