Эмуляция tee с перенаправлениями cat +

Я не могу комментировать, потому что моя репутация но Михал, похоже, вы уже выяснили ответ через lsof. Cron хранит удаленный файл. Вы можете убить cron с помощью pid как:

sudo kill -9 235668

иначе вы можете просто очистить дескриптор файла:

> /proc/235668/fd/5 " or "> /var/lib/vz/root/102/tmp/tmpfzr8ypz
2
10.06.2017, 15:20
3 ответа

Вы не можете сделать это в bash с перенаправлениями, но вы можете сделать что-то вроде это:

$ cat file1
europe|EU
australia|AU
china|CN

$ cat file1 | { IFS=$'\n' read -r -d '' -a a; printf '%s\n' "${a[@]}"; printf '%s\n' "${a[@]}" >teetest; }
europe|EU
australia|AU
china|CN

$ cat teetest
europe|EU
australia|AU
china|CN

Альтернатива:

$ { IFS=$'\n' read -r -d '' -a a; printf '%s\n' "${a[@]}"; printf '%s\n' "${a[@]}" >teetest; } <file1

Или вы можете построить функцию:

$ function teetest { v="$(</dev/stdin)";printf '%s\n' "$v";printf '%s\n' "$v">teetest; }

$ cat file1 |teetest
europe|EU
australia|AU
china|CN

$ cat teetest
europe|EU
australia|AU
china|CN
2
27.01.2020, 21:58

С zsh, да, не с bash.

С zsh:

cat file.in > file1.out > file2.out

или даже:

< file.in > file1.out > file2.out

(работает $NULLCMD: cat по умолчанию)

Обратите внимание, что cat имеет только один стандартный вывод, в который он записывает содержимое file.in. Выше stdout cat представляет собой канал. И zsh считывает этот вывод с другого конца, чтобы записать его как в file1.out, так и в file2.out.

Другими словами, здесь нет никакой магии, zsh просто реализует tee внутри.

2
27.01.2020, 21:58

Функция bash для замены tee, которая заменяет выходной файл:

t(){ rm -f "$1"; while read line; do echo "$line"; echo "$line" >> "$1"; done </dev/stdin;}

И функция bash для замены tee -a, для добавления в выходной файл:

ta(){ while read line; do echo "$line"; echo "$line" >> "$1"; done </dev/stdin;}

Их можно использовать так:

t /tmp/output <somefile
ta /tmp/output <somefile

Или вместе с другими утилитами, такими как cat и grep, вот так:

cat somefile | t /tmp/output | grep blah
cat somefile | ta /tmp/output | grep blah
4
27.01.2020, 21:58

Теги

Похожие вопросы