2015-05-20 10 views
2

Я нахожусь в коробке 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?

Заранее спасибо

+0

Вам нужно 'сделано | «$ SORTEXEC» '(где двойные кавычки могут или не могут быть целесообразными - вы не можете иметь команду с аргументами в переменной, но в этом конкретном сценарии вы вряд ли этого захотите, и если вы действительно это сделаете, команда в функции, вероятно, хорошая идея по многим причинам. См. также http://mywiki.wooledge.org/BashFAQ/050). – tripleee

ответ

2

Используйте tee следующим образом:

somecommand | tee 

Это просто копирует STDIN на стандартный вывод.

или uUse true или false. Все, что они делают, это выход EXIT_SUCCESS или EXIT_FAILURE.

somecommand | true 

Обратите внимание, каждый выход на стандартный вывод из somecommand отбрасывается.

Другой вариант заключается в использовании cat:

somecommand | cat 
+0

, хотя истинная команда выпадала stdout, команда cat и tee работала очень хорошо. –

+0

Я бы пошел с решением 'cat' для общей замены без замены на этапе конвейерной фильтрации. – Kusalananda

4

: является портативным, бездельник команды в спецификации POSIX.

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

: гарантированно будет раковина встроенный в POSIX-совместимой оболочки; другие команды, которые ведут себя аналогичным образом, могут быть внешними программами, для которых требуется новый процесс, чтобы игнорировать вывод.

Однако, как указано в тройном порядке, строки предназначены для хранения данных, а не кода. Вместо этого определите функцию оболочки:

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

while ...; do 
    ... 
done | SORTEXEC 
+0

Лучшее решение, чем у меня + 1 ^^ – chaos

+0

: команда не работает на ksh. –

+0

Определить «не работает». 'echo foo | : 'похоже, работает по назначению, по крайней мере, в' ksh', который поставляется с Mac OS X. – chepner