我想自定义我的 shell 提示符以包含时间。所以,我做到了export PS1='\t\w\$'
。
我的提示现在看起来像18:57:37~$
. 我不知道如何在它前面加上username@hostname
.
另外,我不知道如何更改 、 等的每个参数的\t
颜色\w
。
经过所有测试后,如何将其设置回默认值?
最后,出口线去哪儿了?我看了看~/.profile
,但没有线路export PS1='\t\w\$'
。
我想自定义我的 shell 提示符以包含时间。所以,我做到了export PS1='\t\w\$'
。
我的提示现在看起来像18:57:37~$
. 我不知道如何在它前面加上username@hostname
.
另外,我不知道如何更改 、 等的每个参数的\t
颜色\w
。
经过所有测试后,如何将其设置回默认值?
最后,出口线去哪儿了?我看了看~/.profile
,但没有线路export PS1='\t\w\$'
。
PS1
设置在您的~/.bashrc
. 该文件包含将应用于每个交互式 shell 的设置。当您在 Ubuntu 中打开终端时,您会得到一个交互式 Bash shell,除非您为您的用户设置了不同的默认 shell。在交互式 shell 中,我们需要一个提示符,如果提示符能像 Ubuntu
PS1
那样为我们提供一些有用的信息,比如当前工作目录、当前用户和主机名,那就太好了。这是在我的系统
PS1
的默认版本中设置的行,.bashrc
/etc/skel/.bashrc
从
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
你可以看到转义码username
和分别hostname
是\u
和\h
如果要添加时间和当前工作目录:
要获得颜色,您需要使用颜色转义序列。您可以在 color_prompt 分配中看到一些
.bashrc
例如,
\033[01;34m
是蓝色的:哎呀!现在后面的文字也是蓝色的......最好把它改回白色:
我们应该用转义的方括号包围颜色分配,否则 Bash 会认为它们正在打印提示符并使用它们来计算其大小。当您尝试与您的历史交互时,这会产生奇怪的效果,所以这里是更正的版本:
播放完毕后,您可以通过关闭终端并打开一个新终端来将提示恢复为默认值;)或运行
我
PS1
使用已经在中的代码设置我的喜欢.bashrc
,取消注释#force_color_prompt=yes
并更改颜色代码。在这里您可以看到我更改为设置它的行:(在此之后有更多行更改,但它们不相关)
你可以做同样的事情,但是在某处添加一个
\t
到color_prompt
行中,例如有关颜色和更多内容的 ANSI 转义码列表,请参阅自定义提示的本指南。
我忽略了回答你问题的最后一部分。
我不确定您是否期望运行
export VAR=val
会导致您~/.profile
被自动修改。该export
命令从不这样做。导出变量只会将其传递到从当前 shell 运行的命令的环境中。当您退出 shell(并且它的所有子进程都已退出)时,您从 shell 导出的任何内容都消失了。如果要永久设置环境变量,一般需要
~/.profile
显式添加。您可能用于安装软件的某些脚本可能会修改您的~/.profile
或其他 shell 配置文件。但
PS1
不需要导出到环境中。在我的回答开始时,我说在交互式 shell 中我们需要提示,我的意思是只有交互式 shell 需要提示(因为提示有助于用户与 shell 交互)。不需要其他命令PS1
。PS1
您可能会认为传递给当前 shell 的任何子 shell可能很有用。当你在一个 shell 中运行一个交互式 shell 时bash
,新的 shell 不会继承调用 shell 的 shell 变量;只有它的环境变量。因此,要将变量传递给子 shell,我们应该使用export
它们。但是导出
PS1
通常* 无法将其值传递给子 shell,因为它由 shell 的配置文件重置,/etc/bash.bashrc
并且~/.bashrc
. 因此,没有必要关闭终端(正如我之前建议的那样);即使运行bash
也会将您的提示返回到其通常的形式:(如果你是
exit
这个 shell,编辑后的提示会回来)* 我说通常是因为,虽然非交互式 shell总是unset
PS1
,但交互式 Bash shell 将保留设置的值PS1
。这并不明显,因为如前面的示例所示,它通常由配置文件重置。我们可以通过更改PS1
然后启动一个不读取我们的配置文件的新 shell 来发现它:因此,总而言之,没有in
export
行,因为它不是环境变量,也没有业务是一个,因为只有交互式 shell 需要它,并且由于交互式 shell 需要,它被设置为 in ,因为除非被告知不要,所有交互式 Bash shell ,因此不需要由子 shell 继承(但如果您确实想要某些值而不是子 shell 中的值,您可以通过阻止该 shell 采购来做到这一点)。PS1
~/.profile
PS1
PS1
~/.bashrc
source
~/.bashrc
~/.bashrc
export
PS1
export
PS1
.bashrc
.bashrc
感谢 Eliah Kagan,我能够扩展我的答案,他在聊天中解释了 Bash 如何处理 PS1,并在这个答案中更详细地解释了。