bash output redirect prob
Я хочу посчитать количество строк, выводимых командой в скрипте bash. т.е.
COUNT=ls | wc -l
Но я также хочу, чтобы скрипт выводил исходный вывод из ls
, Как это сделать? (Моя настоящая команда не ls
и это имеет побочные эффекты. Так что я не могу запустить его дважды.)
3 ответа
Решение
tee(1)
Утилита может быть полезна:
$ ls | tee /dev/tty | wc -l
CHANGES
qpi.doc
qpi.lib
qpi.s
4
info coreutils "tee invocation"
включает в себя следующий пример, который может быть более поучительным tee(1)
сила:
wget -O - http://example.com/dvd.iso \
| tee >(sha1sum > dvd.sha1) \
>(md5sum > dvd.md5) \
> dvd.iso
Это загружает файл один раз, отправляет вывод через два дочерних процесса (как запущено через bash(1)
процесс замены), а также tee(1)
это стандартный вывод, который перенаправляется в файл.
ls | tee tmpfile | first command
cat tmpfile | second command
Это хороший способ сделать это, но вы можете сделать что-то попроще:
ls > __tmpfile
cat __tmpfile | wc -l
cat __tmpfile
rm __tmpfile