ディレクトリ内のファイル数(隠しアイテムと一般アイテム)を含むコマンドプロンプト(PS1)

ディレクトリ内のファイル数(隠しアイテムと一般アイテム)を含むコマンドプロンプト(PS1)

ついにお気に入りのPS1形式を見つけましたが、読み込み時間が長すぎました。

遅い部分は、プロンプトから外部コマンドを呼び出すときです。ディレクトリ内のエントリ数と隠しファイル数を表示したいです。

私はプロンプトを作成するための指示として次の2つのページに従いました。「プロンプトの外部コマンド」そして「Bashコマンドプロンプトブログのカスタマイズ」。私は、Danielの「カスタムbashコマンドプロンプトブログ」メソッドが私が思ったよりも速く動作するようにすることができませんでした。とにかく、彼はなぜ\ wの代わりに "pwd"を使用したのですか?また、なぜ彼がvarを生成し、それをエコー($ OUT)するのか理解できません。ああ、私がしたことはこれです...

私は2つの方法を組み合わせて、以下の方法を考えました。うまくいきますが、好きなだけ速くはありません。

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

ベストアンサー1

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すべてのパラメータのパラメータリストが関数に提供されることです。(隠したり、話したり)現在のディレクトリのファイルです。特殊パラメータは、$#シェルの位置パラメータ(対応するパラメータ)の総数を表し、各シェル関数には一意のパラメータセットがあります。

[ -e "$1" ]

...最初の引数が実際に存在することを確認するチェックです。この場合、解析するファイルは常に2つあるため、実際には必要ありません。しかし、可能.*です。ディレクトリが空の場合、globは確認されずに続行されます。パラメータとして渡されます。したがって、関数はチェックを完了し、テストから返されたブール値にパラメータの数を掛けません。これは、テストが真の場合はゼロを返し、偽の場合はゼロ以外の値を返すために機能します。したがって、その数の逆数を掛けると正しい数が与えられます。...**

ここで考慮すべき最後の要素は、シェルが算術を処理する方法です。ほとんどの場合、サブシェルでは変数定義をそれほど簡単に渡すことはできませんが、算術評価を使用すると実際にはそうなるからですeval。これら2つの呼び出しはcount_glob最終的に次の文を印刷します。

$(((c=[num])+(h=[num])+-2))

...そしてシェルはその後の呼び出しに対してもこれらの番号を尊重し割り当てます。プロンプトが表示されたら、それをテストできます。これにより、echo "$h" "$c"毎回プロンプトで報告されるのと同じ値が得られます。私はこれが他の仕事にも役に立つと思いました。

おすすめ記事