Как создать реальную копию дескриптора файла stdout и stderr без использования unbuffer / script / tee только со встроенными модулями bash?

Вы можете использовать cut как:

Команда:

cut --complement -c17-43 file1.txt

Вывод:

Mar 23 08:20:23 : 235
Mar 23 08:21:45 : 127
Mar 23 08:22:34 : 875
Mar 23 08:25:46 : 322
Mar 23 08:26:12 : 639
5
11.05.2019, 04:07
1 ответ

Эта POSIX фальшивая функция оболочки teeне имеет зависимостей:

faketee() {
   if [ "$1" = '-a' ] ; then 
      shift
      while read -r x ; do 
         echo "$x" >> "$1"
         echo "$x"
      done
   else  
      while read -r x ; do 
         echo "$x" > "$1"
         echo "$x"
      done
   fi
}

Протестируйте его в bashс помощью lsна существующем файле,(выводит одну строку в STDOUT)и имя файла без него, (выводит другую строку в STDERR):

cd /tmp
ls /bin/bash /bin/nosuchfile  1>  >(faketee -a std.log) \
                              2>  >(faketee -a err.log >&2)

Выход:

/bin/bash
ls: cannot access '/bin/nosuchfile': No such file or directory

...затем снова запустите его с еще двумя такими именами файлов:

ls /bin/dash /bin/nohowsuchfile  1>  >(faketee -a std.log) \
                                 2>  >(faketee -a err.log >&2)

Выход:

/bin/dash
ls: cannot access '/bin/nohowsuchfile': No such file or directory

Теперь проверьте файлы журнала, чтобы убедиться, что переключатель-aдобавление работает:

grep -n '.' std.log err.log

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

std.log:1:/bin/bash
std.log:2:/bin/dash
err.log:1:ls: cannot access '/bin/nosuchfile': No such file or directory
err.log:2:ls: cannot access '/bin/nohowsuchfile': No such file or directory
0
27.01.2020, 20:43

Теги

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