Bashでカスタム条件式の基本色を定義する方法は?

Bashでカスタム条件式の基本色を定義する方法は?

新しいものをどのようにオーバーライドまたは定義しますか?条件式基本色バッシュから?たとえば、空のディレクトリが存在するかどうかをテストするためにマスターデータベースが必要です。もちろん、1つの基本オプションのみを使用してこれを行うのが最善ですが、これが不可能な場合は、2つの基本オプションを使用できます。たとえば、私は次の目標を達成したいと思います。

    if [ -DZ $HOME/dir ]; # true if directory the path is an empty directory
      then echo "$HOME/dir doesn't have any non-hidden files or directories!"
    fi

答え1

独自の述語を追加するには、組み込みコマンドのソースをtest変更する必要があります。移植できないスクリプトが生成されるので、これはおそらくあなたが望むものではないでしょう。代わりにシェル関数を使用できます。bash[

isemptydir () (
    shopt -s nullglob
    shopt -s dotglob

    if [ -z "$1" ]; then
        echo 'isemptydir: Empty or missing argument' >&2
        return 1

        # could instead do: set .
        # this would use the current directory as the "default" one
    fi

    if [ -d "$1" ]; then
        # note: above test fails on inaccessible dirs --> "not empty"

        set -- "${1%/}"/*
        [ "$#" -eq 0 ]
        # note: above test succeeds on unlistable dirs --> "empty"           
    fi
)

if isemptydir "$mydir"; then
    printf 'Directory "%s" is empty\n' "$mydir"
else
    printf '"%s" is not a directory, or is not empty\n' "$mydir"
fi

この関数は、与えられた引数がディレクトリ名かどうかをテストします。その場合は、隠された名前を含むディレクトリで使用可能な名前(フ​​ァイルだけでなく)の数を数え、0と比較します。最後に実行されたテストの戻り状態は関数の戻り状態です。


[独自の関数オーバーロードやコマンドを使用できますが、testこれによって問題が発生する可能性があります。

関連情報