我想在.bashrc文件中更改我的PS1.
我找到了一个使用带有%q指令的printf来转义字符的脚本:
#!/bin/bash
STR=$(printf "%q" "PS1=\u@\h:\w\$")
sed -i '/PS1/c\'"$STR" ~/.bashrc
问题是我收到此错误:
script.sh: 2: printf: %q: invalid directive
任何的想法 ?也许另一种逃避角色的方法?
解决方法:
printf命令内置于bash中.它也是一个外部命令,通常安装在/usr/bin/printf中.在大多数Linux系统上,/usr/bin/printf是GNU coreutils实现.
较早版本的GNU coreutils printf命令不支持%q格式说明符;它是在2016年10月20日发布的版本8.25中引入的. bash的内置printf命令可以 – 并且只要bash有内置的printf命令.
错误消息暗示您正在使用bash之外的其他内容运行script.sh.
由于#!/ bin / bash行似乎是正确的,您可能正在执行以下操作之一:
sh script.sh
. script.sh
source script.sh
相反,只需直接执行它(在确保它具有执行权限后,如果需要,使用chmod x):
./script.sh
或者您可以手动编辑.bashrc文件.如果脚本正确执行,则会将此行添加到.bashrc中:
PS1=\\u@\\h:\\w\$\
(该行末尾的空间很重要.)或者你可以更简单地这样做:
PS1='\u@\h:\w\$'
该脚本的一个问题是它将替换提到PS1的每一行.如果你只是设置一次,否则不参考它,那很好,但如果你有类似的东西:
if [ ... ] ; then
PS1=this
else
PS1=that
fi
那么剧本就会彻底搞砸了.这有点太聪明了.