Bash UNIX:带特定语言的子午线指示器(AM/AP)空白

Bash UNIX:带特定语言的子午线指示器(AM/AP)空白,bash,unix,date,Bash,Unix,Date,我想定制我的提示。我的问题是: 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:~# dat

我想定制我的提示。我的问题是:

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]$
但是当我在
LC_ALL=C
之前和之后键入
locale
时,我看不到语言环境的差异

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\u ALL
会改变什么其他变量

如果该区域设置没有/使用AM/PM表示法,这是有意义的。

如果您只需要为命令提示符显示时间,那么您可以尝试调用一个函数,使用
陷阱设置
PS1
。这可能不是最理想的方法,但您可以放心,通过设置
LC\u ALL
,您不会弄乱区域设置。您可以通过以下方式进行操作:

$ function display_prompt(){ prompt_time=$(LC_ALL=C date +%r); PS1="[$prompt_time] $ "; }
$ trap display_prompt DEBUG
[11:25:45 PM] $ 
您可以选择所需的
date
的任何格式。您可以将其添加到
~/.bashrc
文件中。

希望这有帮助

@Ash_u似乎唯一的选择是设置
LC_uall
,尽管我觉得奇怪的是设置
LC_u时间
不足以添加新内容。如上所述。@Ash\uo哦,是的,如果你想在
PS1
中使用,你必须使用
export PS1=“[\$(LC\u ALL=en\u US.UTF-8 date+'%I:%m%p')]>”
或类似的东西,或者您必须将
导出LANG
放入您的
中。bashrc
我希望不要使用其他函数,如date等:/I将尝试查找特定的语言环境。@Ash\u所有英语语言环境都有PM/AM时间
en_US.UTF-8
是一个不错的选择。Hmm似乎在Linux Mint 12上的bash 4.2.10中工作。试试看怎么样?很好的提示:
LC\u ALL=C
将我的PS1更新到正确的值!(
[06:14 PM]
)。但是LC_ALL=C是否会做出我不想要的其他更改?我的意思是好的,在我的bashrc中,我把
LC\u ALL=C
然后
LANG=fr\u fr.UTF-8
,但是我希望其他的改变,是吗?我想是的,
LC\u ALL
优先于
LANG
。有关
LANG
LC.*
的详细信息,请参阅。我猜您可能会避免其他更改,并在测试后只设置时间,即
LC_time=C
(正如您稍后在页面中看到的法兰语和德语排序示例)(感谢您的链接):请参阅上面的编辑2。是否
locale
列出
LC_ALL
?设置前它应该为空&稍后设置为
C
。但是如果
locale
没有改变,那么我猜你可以实现信仰的飞跃;)同意。这可能不是最理想的方法,但我不想改变
LC\u ALL
。谢谢编辑:陷阱没有手动输入?!