Тройник не получает выход из трубы - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь вывести в файл через Ти, но это не работает. Удивительно, но раньше это работало, а сейчас - нет. Пожалуйста, сообщите мне проблему или помогите мне с альтернативным кодом.

#!/bin/bash
{
dirname=/path
exec > path/logfile.log 2>&1
tempfile=myTempfileName
find $dirname -type f  > $tempfile
cat $tempfile | sed 's_.*/__' | sort |  uniq -d |
while read fileName
do
 grep "$fileName" $tempfile
done
} | tee 'path/scripts/tj_var1.txt'
#| awk -F"/" '{print $NF}'  | tee 'path/scripts/tj_var1.txt' | sort -u | tee 'path/scripts/tj_mail1.txt'

Журнал показывает, что вывод генерируется. Но почему-то он не передается на вывод команды. Я видел, что Ти пытается что-то написать, по метке времени файла. Но в этом файле ничего нет.

enter image description here

1 Ответ

1 голос
/ 02 апреля 2020

Если вы перенаправите вывод на exec > path/logfile.log, тогда ... ну, вывод будет перенаправлен в файл, а не в канал.

Попробуйте:

#!/bin/bash
{
   dirname=/path
   tempfile=myTempfileName
   find "$dirname" -type f > "$tempfile"
   sed 's_.*/__' "$tempfile" | sort | uniq -d |
   while read fileName
   do
      grep "$fileName" "$tempfile"
   done
} 2>&1 | tee -a path/logfile.log | tee 'path/scripts/tj_var1.txt'
#            ^^ I guess log file should be appended.

I думаю, вы могли бы иметь только стандартный вывод в файле tj_var1.txt:

#!/bin/bash
{
{
   dirname=/path
   tempfile=myTempfileName
   find "$dirname" -type f > "$tempfile"
   sed 's_.*/__' "$tempfile" | sort | uniq -d |
   while read fileName
   do
      grep "$fileName" "$tempfile"
   done
} | tee 'path/scripts/tj_var1.txt'
} 2>&1 | tee -a path/logfile.log

Он в основном находит повторяющиеся имена файлов и выводит его.

Просто:

dirname=/path
find "$dirname" -type f -printf "%f\n" |
sort | uniq -d |
tee -a path/logfile.log | tee 'path/scripts/tj_var1.txt'
...