我有一个类似于以下的命令:... | 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
也会从中读取数据stdin
,因此会阻塞,直到您的实际输入达到 EOF(此时没有更多数据可供第二个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
来反转结果等)