Bash

命令提示符 (PS1),包括目錄中的文件數(隱藏條目和正常條目)

  • November 18, 2018

我終於想出了一個最喜歡的 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",您每次都會獲得與提示報告相同的值。我想這可能對其他事情有用。

引用自:https://unix.stackexchange.com/questions/179550