я хочу 1liner передать по каналу в файл, И терминал одновременно (запишите 1 команду, затем все другие команды показывают как нормальный в терминале, но производят, предпочтительно но не требуемые: название команды, чтобы быть добавленным в файл)
, я знаю, что должностное лицо делает это:
exec > /vga/log/$(date +'%Y%m%d.%H%M%S').txt
ls
но теперь я ничего не вижу в терминале, как я могу добавить мишень к вышеупомянутому так, чтобы это работало, я попробовал
exec > tee /vga/log/$(date +'%Y%m%d.%H%M%S').txt
ls
# creates a file called 'tee' with output, nothing in terminal
exec | tee /vga/log/$(date +'%Y%m%d.%H%M%S').txt
ls
# creates file uninst_total_20150729.161010.txt but is empty, terminal is ok
- решение
#!/bin/bash
exec 1> >(tee -a /vga/log/$(date +'%Y%m%d.%H%M%S').txt)
exec 2>&1
ls
То, что Вы ищете, то, что:
exec 1> >(tee -a $LOGFILE)
Каждые данные, которые являются, отправляют, канал 1 канавки (stdout) перенаправляется линию за линией к tee
, который добавляет -a
это в файл И печатает его к stdout.
, Если Вы хотите перенаправить, оба, stdout и stderr, используют это после первого exec
оператор сверху:
exec 2>&1
Используя script
script
script
через Ctrl-Dtypescript
Пример
% script
% ls -og
total 72
-rw-rw-r-- 1 0 Jul 24 15:11 e
-rw-rw-r-- 1 43 Jul 29 12:54 File1
-rw-rw-r-- 1 26 Jul 29 09:07 File2
-rwxrwxr-x 1 557 Jul 29 09:02 foo
-rw-rw-r-- 1 23 Jul 29 15:33 out
-rw-rw-r-- 1 0 Jul 29 15:32 test
-rw-rw-r-- 1 0 Jul 29 16:01 typescript
Ctrl-D
%
Script started, file is typescript
Script started, file is typescript
Script done, file is typescript
% cat typescript
Script started on Mi 29 Jul 2015 16:01:31 CEST
% ls -og
total 72
-rw-rw-r-- 1 0 Jul 24 15:11 e
-rw-rw-r-- 1 43 Jul 29 12:54 File1
-rw-rw-r-- 1 26 Jul 29 09:07 File2
-rwxrwxr-x 1 557 Jul 29 09:02 foo
-rw-rw-r-- 1 23 Jul 29 15:33 out
-rw-rw-r-- 1 0 Jul 29 15:32 test
-rw-rw-r-- 1 0 Jul 29 16:01 typescript
[aboettger:~/tmp] %
Script done on Mi 29 Jul 2015 16:01:39 CEST
Используя tee
<your_command> | tee -a out
От man tee
-a, --append
append to the given FILEs, do not overwrite
Пример
$ ls -ogla | tee -a out
total 80
drwxrwxr-x 2 4096 Jul 29 15:29 .
drwx------ 52 20480 Jul 29 15:26 ..
-rw-rw-r-- 1 0 Jul 24 15:11 e
-rw-rw-r-- 1 43 Jul 29 12:54 File1
-rw-rw-r-- 1 26 Jul 29 09:07 File2
-rwxrwxr-x 1 557 Jul 29 09:02 foo
-rw-rw-r-- 1 0 Jul 29 15:29 out
$ cat out
total 80
drwxrwxr-x 2 4096 Jul 29 15:29 .
drwx------ 52 20480 Jul 29 15:26 ..
-rw-rw-r-- 1 0 Jul 24 15:11 e
-rw-rw-r-- 1 43 Jul 29 12:54 File1
-rw-rw-r-- 1 26 Jul 29 09:07 File2
-rwxrwxr-x 1 557 Jul 29 09:02 foo
-rw-rw-r-- 1 0 Jul 29 15:29 out