在 shell 命令中向 Heredoc 输出添加反引号 (`)

在 shell 命令中向 Heredoc 输出添加反引号 (`)

PS1="..."我需要在我正在设置的 shell 脚本中添加 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$ '

这显然意味着反引号中的所有内容都没有正确读取。如何使用 shell 转义反引号或以其他方式将包含反引号的行写入文件?

答案1

在此处文档中,正如您所写的那样,shell 会执行此操作参数扩展$PWD例如,在解析脚本时将扩展到当前目录的路径),命令替换(在解析此处文档时,将执行“反引号”,并且该命令生成的任何内容都将插入其位置)算术展开(在你的情况下都没有)。

如果您不希望这样做,即您希望按原样交付此处文档的内容,那么您可以这样做:

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

# contents of here-document here

EOF

第一行周围的撇号EOF可防止 shell 扩展此处文档本身中的任何内容。

相关内容