分页: 1 / 1

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

发表于 : 2014-11-16 17:11
恒河沙数1
昨天重新定义了命令行提示符参数:

代码: 全选

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

感谢 astolia 解决方案在6楼.

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

发表于 : 2014-11-16 18:56
lxf1992521
你这样真的好吗?
还没见过这么用的。

代码: 全选

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


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

发表于 : 2014-11-16 20:24
恒河沙数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@~]$这些, 您可以试试.

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

发表于 : 2014-11-16 22:57
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 很正常。

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

发表于 : 2014-11-17 11:40
恒河沙数1
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 

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

发表于 : 2014-11-17 20:57
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\]\$ "
就没事了

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

发表于 : 2014-11-18 22:42
恒河沙数1
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\] "
效果如下: