我想更改 .bashrc 文件中的 PS1。
我找到了一个使用 printf 和 %q 指令来转义字符的脚本:
#!/bin/bash
STR=$(printf "%q" "PS1=\u@\h:\w\$ ")
sed -i '/PS1/c\'"$STR" ~/.bashrc
问题是我收到此错误:
script.sh: 2: printf: %q: invalid directive
任何想法 ?也许还有另一种逃避角色的方法?
The printf
命令内置于 bash 中。它也是一个外部命令,通常安装在/usr/bin/printf
。在大多数 Linux 系统上,/usr/bin/printf
是 GNU coreutils 实现。
GNU coreutils 的旧版本printf
命令不支持%q
格式说明符;它是在2016年10月20日发布的8.25版本中引入的。 bash 的内置printf
命令确实如此——并且只要 bash 有一个内置的printf
命令。
该错误消息表明您正在运行script.sh
使用 bash 以外的东西。
自从#!/bin/bash
行似乎是正确的,您可能正在执行以下操作之一:
sh script.sh
. script.sh
source script.sh
相反,直接执行即可(在确保具有执行权限后,使用chmod +x
如果需要的话):
./script.sh
或者你可以编辑你的.bashrc
手动归档。如果正确执行该脚本,则会将此行添加到您的.bashrc
:
PS1=\\u@\\h:\\w\$\
(该行末尾的空格很重要。)或者您可以更简单地这样做:
PS1='\u@\h:\w\$ '
该脚本的一个问题是它将替换every提到的行PS1
。如果您只设置一次并且不引用它,那很好,但是如果您有类似的内容:
if [ ... ] ; then
PS1=this
else
PS1=that
fi
那么脚本就会彻底搞乱它。只是有点太聪明了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)