다음과 유사한 명령이 있습니다 ... | 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
이 작업을 두 번 수행합니다 sort
(한 번은 인수가 지원되는지 확인한 다음 실제로 실행합니다). 그러나 당신이 잊어버린 것은 첫 번째 인스턴스 sort
도 그것으로부터 읽고 있으므로 실제 입력이 EOF에 도달할 때까지 차단된다는 것입니다(이 시점에서 두 번째 인스턴스가 읽을 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
매개변수 지원이 추가되었습니다(예: 결과를 반전하는 데 사용할 수 있음 등).