Gro*_*ler 4 shell bash shell-script
我需要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
Run Code Online (Sandbox Code Playgroud)
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$ '
Run Code Online (Sandbox Code Playgroud)
nano ~/bashrc 给出:
PS1='\[^[[32m\]\h [\u]\[^[(B^[[m\]:/Users/myuser/Library/Application Support/Sublime Text 3/Packages/User\n$ '
Run Code Online (Sandbox Code Playgroud)
这显然意味着没有正确读取反引号中的所有内容。如何使用 shell 转义反引号或以其他方式将包含反引号的行写入文件?
在 here-document 中,正如您所写的,shell 将进行参数扩展($PWD例如,在解析脚本时将扩展到当前目录的路径)、命令替换(“反引号”将执行,并且该命令产生的任何内容都将插入到它们的位置,在解析此处文档时)和算术扩展(在您的情况下都没有)。
如果您不希望这样,即您希望按原样交付 here-document 的内容,那么您可以这样做:
tee -a "$HOME/.bashrc" <<'EOF'
# contents of here-document here
EOF
Run Code Online (Sandbox Code Playgroud)
EOF第一行周围的撇号可防止外壳扩展此处文档本身中的任何内容。