簡體   English   中英

PS1不能有兩個“ \\ $”嗎?

[英]PS1 can't have two “\$”?

我希望我的bash提示字符串1同時具有日期/時間和最后一條命令的返回碼。 所以我以為我可以

PS1="\[\e[00;34;01m\]\$(date +'%a %b %e, %T')\[\e[35m\] \$?\[\e[00m\] >> "

我以為這會給我一個藍色的日期(例如Thu Jul 2, 01:01:01 )一個紫色的返回碼,然后是>> (因為ansi轉義序列會根據大多數終端托盤產生“正常”顏色)。 但是,它不起作用。


PS1="\$? >> "

PS1="\$(date +\"%a %b %e, %T\") >> "

但是,兩者都可以工作,而且當我以第一種方式進行操作時,只有第一個"\\$"會被解釋,而另一個僅在我的bashrc來源時被解釋。 (因此, "\\$?"最初被評估為0並保持為0

為什么會這樣呢?

注意:我什至嘗試過PS1='$(date +"%a %b %e, %T") $? >> ' PS1='$(date +"%a %b %e, %T") $? >> '

其他人可以在Unix bash中復制嗎? 如果是/否,請發表評論。

它不忽略$? \\$?只是逸出版本$?所以,當你設置的變量,而是當提示字符串被擴展不計算)。

相反,它返回您運行的最后一個命令的退出代碼。 在這種情況下,始終是提示符前面的$(date ...)命令。 由於該date命令永遠不會失敗,因此返回碼始終為0。

要解決此問題,正如Ian所指出的,您可以在提示字符串中使用\\D{%a %b %e, %T}代替\\$(date ...)來格式化日期。 由於它是內置的而不是單獨的命令,因此不會破壞$?

我不知道為什么bash忽略第二個\\ $,但是嘗試使用\\ D格式作為日期:

PS1="\[\e[00;34;01m\]\D{%a %b %e, %T}\[\e[35m\] \$?\[\e[00m\] >> "

這在bash版本4.2.46下對我有效

$? 在提示符中看到的是date命令的退出代碼。 您可以這樣驗證:

$ PS1="\[\e[00;34;01m\]\$(exit 10)\[\e[35m\] \$?\[\e[00m\] >> "
10 >>

解決方法:

$ PROMPT_COMMAND='EXIT_CODE=$?'
$ PS1="\[\e[00;34;01m\]\$(date +'%a %b %e, %T')\[\e[35m\] \$EXIT_CODE\[\e[00m\] >> "

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM