【已解决】重新设置了命令行提示符参数PS1, 但是不会自动换行

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
恒河沙数1
帖子: 295
注册时间: 2013-04-27 19:26
系统: ubuntu+win7

【已解决】重新设置了命令行提示符参数PS1, 但是不会自动换行

#1

帖子 恒河沙数1 » 2014-11-16 17:11

昨天重新定义了命令行提示符参数:

代码: 全选

PS1="[\t@\w]$ "
echo $PS1 >> .bashrc
之后我的命令行提示符变成了这样, 很是满意:
[17:07:20@~/Programs/Shell/flight_data]$
但是今天突然发现, 当命令很长时, 不会自动换行, 而是直接覆盖了我的命令行提示符, 请问大家知道这是怎么回事么?

感谢 astolia 解决方案在6楼.
上次由 恒河沙数1 在 2014-11-18 23:00,总共编辑 2 次。
头像
lxf1992521
帖子: 240
注册时间: 2011-06-26 18:28
联系:

Re: 重新设置了命令行提示符参数PS1, 但是不会自动换行

#2

帖子 lxf1992521 » 2014-11-16 18:56

你这样真的好吗?
还没见过这么用的。

代码: 全选

ilinunix@Ubuntu:~$ echo 'export PS1="[\t@\w]$ "' >> .bashrc 
ilinunix@Ubuntu:~$ . .bashrc
[18:54:07@~]$ echo $PS1
[\t@\w]$
[18:54:18@~]$ 

恒河沙数1
帖子: 295
注册时间: 2013-04-27 19:26
系统: ubuntu+win7

Re: 重新设置了命令行提示符参数PS1, 但是不会自动换行

#3

帖子 恒河沙数1 » 2014-11-16 20:24

lxf1992521 写了:你这样真的好吗?
还没见过这么用的。

代码: 全选

ilinunix@Ubuntu:~$ echo 'export PS1="[\t@\w]$ "' >> .bashrc 
ilinunix@Ubuntu:~$ . .bashrc
[18:54:07@~]$ echo $PS1
[\t@\w]$
[18:54:18@~]$ 

您好, 这样是没问题的, 不过命令很长的时候就会出现问题: 应该换到下一行的命令跑到了这一行的开头, 覆盖了[18:54:18@~]$这些, 您可以试试.
头像
lxf1992521
帖子: 240
注册时间: 2011-06-26 18:28
联系:

Re: 重新设置了命令行提示符参数PS1, 但是不会自动换行

#4

帖子 lxf1992521 » 2014-11-16 22:57

恒河沙数1 写了:
lxf1992521 写了:你这样真的好吗?
还没见过这么用的。

代码: 全选

ilinunix@Ubuntu:~$ echo 'export PS1="[\t@\w]$ "' >> .bashrc 
ilinunix@Ubuntu:~$ . .bashrc
[18:54:07@~]$ echo $PS1
[\t@\w]$
[18:54:18@~]$ 

您好, 这样是没问题的, 不过命令很长的时候就会出现问题: 应该换到下一行的命令跑到了这一行的开头, 覆盖了[18:54:18@~]$这些, 您可以试试.
额……,应该是你的终端本身的问题,我这边用 gnome-terminal 很正常。
恒河沙数1
帖子: 295
注册时间: 2013-04-27 19:26
系统: ubuntu+win7

Re: 重新设置了命令行提示符参数PS1, 但是不会自动换行

#5

帖子 恒河沙数1 » 2014-11-17 11:40

lxf1992521 写了:
恒河沙数1 写了:
lxf1992521 写了:你这样真的好吗?
还没见过这么用的。

代码: 全选

ilinunix@Ubuntu:~$ echo 'export PS1="[\t@\w]$ "' >> .bashrc 
ilinunix@Ubuntu:~$ . .bashrc
[18:54:07@~]$ echo $PS1
[\t@\w]$
[18:54:18@~]$ 

您好, 这样是没问题的, 不过命令很长的时候就会出现问题: 应该换到下一行的命令跑到了这一行的开头, 覆盖了[18:54:18@~]$这些, 您可以试试.
额……,应该是你的终端本身的问题,我这边用 gnome-terminal 很正常。
您好, 我用的就是 gnome-terminal , 还有我发现PS1="[\t@\w]$ " 确实没问题, 但是字符加粗后问题就出现了, 您可以试下:

代码: 全选

echo 'export PS1="\e[1m[\t@\w]\e[0m\$ "' >> .bashrc 
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 重新设置了命令行提示符参数PS1, 但是不会自动换行

#6

帖子 astolia » 2014-11-17 20:57

你仔细看一下,就会发现原因是提前做了回车动作将光标移动到了行首。而提前量正好是你用的控制字符数量
如果要用控制字符,务必用\[和\]包裹,否则算行宽度时会出错,导致你遇到的换行问题。
以下摘抄自bash的manpage中PROMPTING一节

代码: 全选

              \[     begin a sequence  of  non-printing  characters,  which
                     could  be  used  to  embed a terminal control sequence
                     into the prompt
              \]     end a sequence of non-printing characters
所以换成

代码: 全选

export PS1="\[\e[1m\][\t@\w]\[\e[0m\]\$ "
就没事了
恒河沙数1
帖子: 295
注册时间: 2013-04-27 19:26
系统: ubuntu+win7

Re: 重新设置了命令行提示符参数PS1, 但是不会自动换行

#7

帖子 恒河沙数1 » 2014-11-18 22:42

astolia 写了:你仔细看一下,就会发现原因是提前做了回车动作将光标移动到了行首。而提前量正好是你用的控制字符数量
如果要用控制字符,务必用\[和\]包裹,否则算行宽度时会出错,导致你遇到的换行问题。
以下摘抄自bash的manpage中PROMPTING一节

代码: 全选

              \[     begin a sequence  of  non-printing  characters,  which
                     could  be  used  to  embed a terminal control sequence
                     into the prompt
              \]     end a sequence of non-printing characters
所以换成

代码: 全选

export PS1="\[\e[1m\][\t@\w]\[\e[0m\]\$ "
就没事了
感谢, 这样做就成功啦, 分享一下我的PS1变量:

代码: 全选

PS1="\[\033[01m\][\[\033[01;32m\]\t\[\033[00m\]\[\033[01m\]@\[\033[01;34m\]\w\[\033[00m\]\[\033[01m\]]\n\$\[\033[00m\] "
效果如下:
附件
terminal.png
terminal.png (7.84 KiB) 查看 4918 次
回复