命令提示符 (PS1),包括目錄中的文件數(隱藏條目和正常條目)
我終於想出了一個最喜歡的 PS1 格式,但我發現載入時間太長了。
減慢速度的部分是當我在提示符中呼叫外部命令時。我只想顯示目錄的條目數和隱藏文件數。
我按照這 2 頁作為製作提示的指南:“External command in prompt”和“customizing bash command prompt blog”。我無法讓 Daniel 的“自定義 bash 命令提示符部落格”方法比我想出的更快。他為什麼要使用“pwd”而不是 \w 呢?另外,我不明白他為什麼要製作一個 var 並附上它($OUT)。哦,好吧,這就是我所做的……
我將這兩種方法結合起來並提出了以下方法,它有效,但沒有我想要的那麼快……
export PS1="\[\e[2;37m\]\d \[\e[2;37m\] @ \[\e[2;37m\] \t \[\e[2;33m\]> Currently in: \[\e[0;33m\]\w [\$(ls -A | wc -l) entries and \$[\$(ls -A | wc -l) - \$(ls | wc -l)$wc -l)] are hidden] \[\e[0m\] \[\e[2;36m\]\u\[\e[0;37m\]@\[\e[1;32m\]\h\[\e[0;33m\] \$ \[\e[0m\]"
根據@mikeserv 的建議,在 bashrc 中新編輯的命令:
export PS1="\[\e[2;37m\]\d \[\e[2;37m\] @ \[\e[2;37m\] \t \[\e[2;33m\]>Currently in: \[\e[0;33m\] $(($(count_glob c * count_glob h .*)0)) entries and $h are hidden \[\e[0m\] \[\e[3;36m\]\u\[\e[0;37m\]@\[\e[1;93m\]\h\[\e[0;33m\] \$\[\e[0m\]"
結果如下:
Tue Jan 20 @ 18:37:58 >Currently in: 24 entries and are hidden
count_glob() { [ -e "$1" ] echo "($v=$((!$?*$#)))+" }
你可以聲明一個像上面這樣的函式。然後
ls
你可以做的而不是剩下的……...Currently in: $(($( v=c count_glob * v=h count_glob .* )-2)) entries and $((h-2)) are hidden...
我只刪除了轉義序列,因為它們在這裡不相關 - 它也適用於它們。
所以現在大家一起…
export PS1='\[\e[2;37m\]\d \[\e[2;37m\] @ \[\e[2;37m\] \t \[\e[2;33m\]>'\ 'Currently in: \[\e[0;33m\] $(($( v=c count_glob * v=h count_glob .* )-2)) entries and $((h-2)) are hidden '\ '\[\e[3;36m\]\u\[\e[0;37m\]@\[\e[1;93m\]\h\[\e[0;33m\] \$\[\e[0m\]'
好的,所以這裡發生的事情是為
count_glob
函式提供了目前目錄中所有*(隱藏或不隱藏)*文件的參數列表。特殊參數$#
表示 shell 位置參數的總數 - 它的參數 - 每個 shell 函式都有自己的一組。[ -e "$1" ]
… 是檢查第一個參數是否確實存在 - 在這種情況下實際上沒有必要,因為
.*
總是有兩個文件要解析 - 但是有可能 - 如果目錄為空 - glob 將不會解決並且仍將作為參數傳遞。所以在函式中檢查完成並且測試返回的布爾值不乘以參數計數。這是有效的,因為如果測試為真,則返回 0,如果不是零,則返回 0 - 因此乘以這些數字的倒數可以使您的計數正確。.``..``*``*
這裡要考慮的最後一個因素是 shell 處理算術的方式。在大多數情況下,您不能以這種方式輕鬆地將變數定義從子shell 中傳遞出去——但是通過算術評估你可以——因為它確實是
eval
最真實的。這兩個呼叫count_glob
最終列印瞭如下所示的語句:$(((c=[num])+(h=[num])+-2))
…並且外殼會尊重並分配這些數字 - 即使是隨後的呼叫。您可以在提示時對此進行測試 - 這樣做
echo "$h" "$c"
,您每次都會獲得與提示報告相同的值。我想這可能對其他事情有用。