linux – Bash printf%q无效指令

我想在.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

那么剧本就会彻底搞砸了.这有点太聪明了.

上一篇:常用Linux命令总结


下一篇:批量收集、分析windows log