次のようなコマンドがあります... | sort -u -V
。一部のバージョンではsort
そのフラグをサポートしていないため、-V
条件に応じてフラグを追加する関数を作成してほしいと思いました。しかし、私の実装はパイプされたコマンドでは機能しないようです。私が試したことは次のとおりです。
function sort_by_version {
if $(sort -u -V &>/dev/null); then
sort -u -V
else
sort -u
fi
}
そして
git log -n 10 --format="%s" | sort_by_version
これをどのように実行できますか?それとも他のより良い方法はありますか?
答え1
これを2回実行しますsort
(一度は引数がサポートされていることを確認してから実際に実行します)。しかし、あなたが忘れてしまったのは、sort
最初のインスタンスもそれから読み取っているので、実際の入力がEOFに達するまでブロックされることです(この時点で2番目のインスタンスが読み取るstdin
データはもうありません)。sort
したがって、最初のエントリをリダイレクトしてくださいsort
(stdin
パラメータサポートを追加しました(使用)、$@
望ましくない場合は削除してください)。
function sort_by_version {
if $(sort -u -V < /dev/null &>/dev/null); then
sort -u -V "$@"
else
sort -u "$@"
fi
}
編集する:sort_by_version -r
パラメータサポートが追加されました(結果を反転するために使用できるなど)。