Keith Thompson在他的回答中给出了很好的建议。但FWIW,你可以强制bash命令名前使用一个内置的命令builtin
如
builtin printf "%q" "PS1=\[email protected]\h:\w\$ "
相反,
command printf "%s\n" some stuff
军队的bash使用外部命令(如果可以找一个)。
command
可用于当功能具有相同名称的存在是为了在磁盘上调用的命令。然而,command
确实是而不是在磁盘上调用一个命令来代替Bash内置的同名,它只能用来禁止调用shell函数。 (感谢Rockallite将此错误引起我的注意)。
可以启用或禁用特定的bash内建函数(也许你的.bashrc正在这样做printf)。详情请参阅help enable
。我想我应该提到的是,你可以使用
type printf
找出什么样的实体(外壳功能,内置或外部命令)的时候,你给它一个裸体printf
bash将运行。你可以通过type
的-a
选项,如
type -a printf
得到一个指定名称的所有命令的列表
您可以用grep看到你的.bashrc文件中包含PS1行:
grep 'PS1' ~/.bashrc
或
grep -n0 --color=auto 'PS1=' ~/.bashrc
它给你行号和花式彩色输出。然后你可以使用行号强制sed只修改你想改变的行。
例如,如果grep的告诉你,你要更改的行是第7,你可以做
sed -i '7c\'"$STR" ~/.bashrc
进行编辑。或者更好,
sed -i~ '7c\'"$STR" ~/.bashrc
如果你犯了一个错误,它将备份文件的原始版本。
当我使用sed -i
时,我通常会首先进行测试运行,而不使用-i
,以便输出到shell,让我在将它们写入文件之前查看所做的修改。
这是手动操作比使用花哨的命令行更简单,更安全的情况之一。 :) – 2014-09-27 19:00:57
RE:'GNU coreutils printf命令不支持%q格式说明符'coreutils文档现在提到'%q'指令:https://www.gnu.org/software/coreutils/printf – 2017-02-16 14:00:42
@JanusTroelsen : 更新。 – 2017-02-16 18:16:45