Перенаправление stdout к терминалу и файлу, не используя канал?

Похож на этот make-файл, включает два файла (xyz.mak и pqr.mak) из его родительского каталога.

Это кажется, конечно, полезным для меня.

4
18.12.2014, 15:02
3 ответа

В зависимости от версии passwd можно попробовать

  • passwd -f : Заставляет пользователя менять пароль при следующем входе в систему, истекая срок действия пароля для имени.

  • passwd -e или passwd --expire : немедленный срок действия пароля учетной записи. Это фактически может заставить пользователя изменить свой пароль при следующем входе пользователя в систему.

-121--14941-

perl было бы хорошо для этого:

perl -ne 'for $n (1..4096) {s/\d+/ sprintf "%04d", $n /e; print}' File > File2
-121--63194-

Вы можете сделать что-то вроде:

func > >(tee log.txt) 2>&1
wait

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

exec 3> >(tee log.txt)
tee_pid=$!

func >&3 2>&1
...

Берегитесь, что, поскольку tee работает в фоновом режиме, если не все выходные данные проходят через него, то порядок в

3
27.01.2020, 20:54

Вы можете использовать файл TMP

func >tmpfile 2>&1
tee 'log.txt' <tmpfile

или FIFO

mkfifo pipe_replacement
tee 'log.txt' <pipe_replacement &
func >pipe_replacement 2>&1
1
27.01.2020, 20:54

Мне было бы понравиться ...

#!/bin/sh -x
run() if ! ps -p "$run" >&2
      then n=0 run=$$ exec "$0" "$@" 2>&1 | {
         ! tee outfile ; }
      fi 2>/dev/null
run "$@" || exit

fn() { var=val$n; echo "$((n+=1)): $var"; }
fn 
sleep 5
fn
IN

, что первые проверяет, есть ли у него открытая труба к Tee в другом процессе, и, если нет, это Exec S сам в один. После того, как все выходные вывод обедают для остальной части скрипта, и все переменные устанавливаются между затем и выходом скрипта, - это фактически, как оно делает проверку в первую очередь.

Итак, запустив вышеуказанные отпечатки:

+ run
+ run
+ fn
+ var=val0
+ echo 1: val0
1: val0
+ sleep 5
+ fn
+ var=val1
+ echo 2: val1
2: val1
+ exit

и работает outfile После этого принты ...

+ run
+ run
+ fn
+ var=val0
+ echo 1: val0
1: val0
+ sleep 5
+ fn
+ var=val1
+ echo 2: val1
2: val1
+ exit

Вы также можете рассмотреть возможность использования SED , в отличие от TEE . В то время как Tee будет больше исполнителей для корпуса All-part SED может записывать во многих файлах одновременно и может сделать это условно.

Например, вы можете повторить линию:

echo 'LOG-ONLY: some message here'

и прослушивание SED процесс может сделать:

sed -n '/^LOG-ONLY:/!p;s///w ./my_log.txt'

... который бы w обретает эту линию к Файл после зачистки LOG_ONLY Часть и воздерживаться от печати его к терминалу.

1
27.01.2020, 20:54

Теги

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