管道什么都不做

时间:2015-05-20 13:41:21

标签: bash sh ksh nop

我在AIX盒子上,并且需要一个在管道之后不使用的程序。

我会更准确。我需要这样的东西:

if [ $NOSORT ] ; then
    SORTEXEC="/usr/bin/doesnothing"
else
    SORTEXEC="/usr/bin/sort -u"
fi
# BIG WHILE HERE
do

done | SORTEXEC

我尝试使用tee > /dev/null,但我不知道是否还有其他更好的选择。

任何人都可以使用更合适的程序tee吗?

提前致谢

2 个答案:

答案 0 :(得分:4)

:是POSIX规范中的可移植,无操作命令。

if [ "$NOSORT" ] ; then
    SORTEXEC=:
else
    SORTEXEC="/usr/bin/sort -u"
fi 

:保证是一个内置于POSIX兼容shell的shell;其他行为相似的命令可能是需要启动新进程忽略输出的外部程序。

然而,正如tripleee指出的那样,字符串意味着保存数据,而不是代码。改为定义shell函数:

if [ "$NOSORT" ]; then
    SORTEXEC () { : ; }
else
    SORTEXEC () { /usr/bin/sort -u; }
fi

while ...; do
    ...
done | SORTEXEC

答案 1 :(得分:2)

使用role,如下所示:

tee

这只是将stdin复制到stdout。

或者使用somecommand | tee true。他们只需退出falseEXIT_SUCCESS

EXIT_FAILURE

请注意,somecommand | true 的每个输出到stdout都会被删除。

另一种选择是使用somecommand

cat