2

我想自定义我的提示。这是我的问题:

root@server:~# PS1="[\@]\$" // should write [05:40 PM]
[05:40 ]$ 

也许这可以成为一个线索?

root@server:~# LANG=en_EN.UTF-8
root@server:~# date +%T%p
17:25:05PM

现在 :

root@server:~# LANG=fr_FR.UTF-8
root@server:~# date +%T%p
17:25:15
root@server:~# date +%p

root@server:~#

非常感谢 !


编辑 1:这对 PS1 没有任何改变!

root@server:~# LANG=en_EN.UTF-8
root@server:~# PS1="[\@]\$"
[05:40 ]$

编辑 2: 效果很好,但我预计不需要的更改:

root@server:~# LC_ALL=C
root@server:~# PS1="[\@]\$"
[06:34 PM]$

但是我在输入locale前后没有发现语言环境的差异LC_ALL=C

root@server:~# PS1="[\@] \$"
[06:44 ] $locale
LANG=fr_FR.UTF-8
LANGUAGE=
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=
[06:44 ] $env
// ...
LANG=fr_FR.UTF-8
// ...

然后 :

[06:45 ] $LC_ALL=C
[06:45 PM]$locale
LANG=fr_FR.UTF-8
LANGUAGE=
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=
[06:46 PM] $env
// ...
LANG=fr_FR.UTF-8
// ...

还有什么其他变量会LC_ALL改变?!...

4

2 回答 2

1

如果您只需要为命令提示符显示时间,那么您可以尝试调用一个PS1使用trap. 这可能不是最理想的方法,但您可以放心,您不会通过设置LC_ALL. 您可以在这些行上做一些事情:

$ function display_prompt(){ prompt_time=$(LC_ALL=C date +%r); PS1="[$prompt_time] $ "; }
$ trap display_prompt DEBUG
[11:25:45 PM] $ 

您可以选择任何date您想要的格式。您可以将其添加到~/.bashrc文件中。
希望这可以帮助!

于 2012-04-19T18:00:15.253 回答
0

好吧,如果该语言环境没有/使用 AM/PM 表示法,那是有道理的。

于 2012-04-19T15:47:09.373 回答