如果沒有顏色,我的提示看起來像這樣:
[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[0] [dimo414@dimo414:/tmp]\n\$
我會加一些顏色並\[
......\]
界定它:
[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[\[\e[32m\]0\[\e[0m\]] [\[\e[34m\]dimo414\[\e[0m\]\[\e[32m\]@dimo414\[\e[0m\]:\[\e[94m\]/tmp\[\e[0m\]]\n\$
看起來很棒!但是Bash常見問題解答指出:
\[ \] 僅當您指派 PS1 時才特殊,如果您將它們列印在顯示提示時運行的函數中,則它將不起作用。在這種情況下,您需要使用位元組 \001 和 \002
然而,當我更改提示來使用時\001
,\002
我得到了這個(StackExchange 似乎正確地將它們呈現為零寬度字符,但它們就在那裡):
[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[\e[32m0\e[0m] [\e[34mdimo414\e[0m\e[32m@dimo414\e[0m:\e[94m/tmp\e[0m]\n\$
同樣的提示 - 帶有\001
... \002
- 在 OSX 上的 iTerm2 中看起來是正確的。
我使用這兩個命令來轉義顏色序列:
# Previously (works)
printf '\[%s\]' "$(color "$@")"
# Currently (doesn't work on Ubuntu)
printf '\001%s\002' "$(color "$@")"
為了在 Ubuntu 上使用\001
... ,我應該做什麼而不是第二個選項?\002