Bash: выводит переменную, содержащую вывод программы, в файл
Когда я выполняю унисон-туры 2> / dev / null | grep -A 2 '<-? ->' в приглашении bash, я получаю точный вывод, который ищу:
*changed <-?-> changed Future Tours/File Clash Test.docx
local : changed file modified on 2013-06-05 at 16:24:40 size 10221 rw-rw----
bj-server... : changed file modified on 2013-06-05 at 16:23:53 size 10232 rw-rw----*
Когда я помещаю это в сценарий оболочки:
#!/bin/bash
tmp=$(unison tours 2> /dev/null | grep -A 2 '<-?->')
echo "$tmp" > /home/users/itsystem/test.log
... выходит странно. Запустив больше test.log, я получаю следующее:
- Системные ведомости / Обратная связь She ппа).xls | Прошедшие туры /2012/CE0 12 Cherry (N... наши меню / Лицзян Тур Menus.xls - Прошедшие туры /2012/UC041112 St - Прошедшие туры /2012/UC081112 Lopata (N... Меню - UC081012 Lo 2/VC110912 Левин (VI... Меню - VC110912 Левин (VI).xlsx XLSX | Будущие туры /2013 Futur / Справки / Выдающиеся / Теренс Парк... Маршрут (Трев изменено изменено Будущие туры / Файл Clash Test.docx local: измененный файл изменен 2013-06-05 в 16:24:40 размер 10221 rw-rw---- bj-сервер...: измененный файл изменен 2013-06-05 в 16:23:53 размер 10232 rw-rw----
Откуда взялась другая хрень?
Если вы просто запустите unison, вы получите анимированную строку вывода, которая постоянно обновляется вращающейся -\|/, показывая рабочую папку, но которая в конечном итоге исчезает.
Если мой grep работает в командной строке bash, то почему не из сценария оболочки?
1 ответ
Анимированная строка содержит последовательность управляющих символов, которые изменяют положение курсора на терминале. Тот же эффект не достигается, когда вывод направляется в файл; вы просто получаете запись всех байтов, которые были записаны в терминал.