Я не могу комментировать, потому что моя репутация но Михал, похоже, вы уже выяснили ответ через lsof. Cron хранит удаленный файл. Вы можете убить cron с помощью pid как:
sudo kill -9 235668
иначе вы можете просто очистить дескриптор файла:
> /proc/235668/fd/5 " or "> /var/lib/vz/root/102/tmp/tmpfzr8ypz
Вы не можете сделать это в 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
С 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
внутри.
Функция 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