1

我厌倦了在 /etc/bashrc 上找到 sed 替换的解决方案

我喜欢换线

PS1="\u@\h NEW [\w]# "

为了这

PS1="\u@\h.hostname.com NEW [\w]# "    

在哪里 hostname.com

HOST=$(hostname)

尝试几种 sustituions,逃避 \ 但什么都没有。

另请参阅另一个问题,如何在嵌入 bash 脚本的 sed 脚本中转义反斜杠,但我迷路了。

通常我使用 "" 来使用 ${VARIABLE} 但不起作用,如果使用 \ 进行转义也是如此

sed -i "s/^PS1.*$/PS1=\"\\u@\\h.${HOST}\ \[\\w\]#\ \"/g" /etc/bashrc
4

2 回答 2

2

如果\H您想在提示中显示完整的主机名,请使用。那么您就不必担心这种sed替换。

将您更改PS1为:

PS1="\u@\H NEW [\w]# "    

如果你想使用sed,下面的命令应该可以工作:

sed 's/\(^.*\h\)\(.*$\)/\1.'"$HOST"'\2/g' /etc/bashrc
于 2012-12-14T09:43:02.523 回答
0

经过多次测试,我得到了解决方案。

HOST=$(hostname); sed -i "s/^PS1.*$/PS1=\"\\\u@\\\h.${HOST}\ \[\\\w\]#\ \"/g" /etc/bashrc

阅读用户 dogbane y 的评论后更改为

sed -i "s/^PS1.*$/PS1=\"\\\u@\\\H\ \[\\\w\]#\ \"/g" /etc/bashrc

谢谢...

于 2012-12-14T10:31:12.830 回答