Вывод прогресса и перенаправление stderr в sftp

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
mike345
сержант
Сообщения: 170
Зарегистрирован: 2007-12-09 15:57:55

Вывод прогресса и перенаправление stderr в sftp

Непрочитанное сообщение mike345 » 2009-06-18 1:14:29

Никак не могу справиться с такой задачей:

Код: Выделить всё

echo "put ./tmp /files/backups/`hostname`.base.gz.upl" | sftp -oPort=2222 rs@${bserver}
при выполнении команды показывается прогресс.
Мне нужно получить код выхода при ошибке, но $? даже если файла ./tmp нет все равно равен 0, однако на stderr выводится соответствующее сообщение.
Если добавить 2> file и потом файл проанализировать можно выцепить ошибку, но тогда прогресс не показывает...

Как сделать, чтобы и прогресс показывал и ошибку можно было отловить в скрипте?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Вывод прогресса и перенаправление stderr в sftp

Непрочитанное сообщение zg » 2009-06-18 5:16:20

mike345 писал(а):Как сделать, чтобы и прогресс показывал и ошибку можно было отловить в скрипте?
man tee

Аватара пользователя
mike345
сержант
Сообщения: 170
Зарегистрирован: 2007-12-09 15:57:55

Re: Вывод прогресса и перенаправление stderr в sftp

Непрочитанное сообщение mike345 » 2009-06-18 9:07:31

Пробовал я tee.

Код: Выделить всё

echo "put ./tmp /files/backups/`hostname`.base.gz.upl" | sftp -oPort=2222 rs@${bserver} | tee file
В файл пишет, но прогресс не выводит никуда :(

Аватара пользователя
mike345
сержант
Сообщения: 170
Зарегистрирован: 2007-12-09 15:57:55

Re: Вывод прогресса и перенаправление stderr в sftp

Непрочитанное сообщение mike345 » 2009-06-18 9:17:07

Вообще когда есть перенаправление что > file, что 2> file, прогресс пропадает...

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Вывод прогресса и перенаправление stderr в sftp

Непрочитанное сообщение zg » 2009-06-18 12:05:32

mike345 писал(а):Пробовал я tee.
тебе надо stderr завернуть на stdin а потом только tee

Аватара пользователя
mike345
сержант
Сообщения: 170
Зарегистрирован: 2007-12-09 15:57:55

Re: Вывод прогресса и перенаправление stderr в sftp

Непрочитанное сообщение mike345 » 2009-06-18 17:52:42

Код: Выделить всё

echo "put ./tmp /files/backups/`hostname`.base.gz.upl" | sftp -oPort=2222 rs@${bserver}  2>&1 | tee file
Эффект тот же - прогресса не показывает...

Гость
проходил мимо

Re: Вывод прогресса и перенаправление stderr в sftp

Непрочитанное сообщение Гость » 2009-06-18 18:43:39

mike345 писал(а):Если добавить 2> file и потом файл проанализировать можно выцепить ошибку, но тогда прогресс не показывает...
автор sftp.c явно не смотрел внутрь progressbar.c, где везде используется STDOUT_FILENO. Попробуй применить патчик

Код: Выделить всё

Index: crypto/openssh/sftp.c
===================================================================
--- crypto/openssh/sftp.c	(revision 194429)
+++ crypto/openssh/sftp.c	(working copy)
@@ -1765,7 +1765,7 @@ main(int argc, char **argv)
 		}
 	}
 
-	if (!isatty(STDERR_FILENO))
+	if (!isatty(STDOUT_FILENO))
 		showprogress = 0;
 
 	log_init(argv[0], ll, SYSLOG_FACILITY_USER, 1);
и использовать 2> file.

ps, почему полоска прогресса выходит на stdout, а не stderr, это отдельный повод для флейма