Страница 1 из 1

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

Добавлено: 2009-06-18 1:14:29
mike345
Никак не могу справиться с такой задачей:

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

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

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

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

Добавлено: 2009-06-18 5:16:20
zg
mike345 писал(а):Как сделать, чтобы и прогресс показывал и ошибку можно было отловить в скрипте?
man tee

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

Добавлено: 2009-06-18 9:07:31
mike345
Пробовал я tee.

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

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

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

Добавлено: 2009-06-18 9:17:07
mike345
Вообще когда есть перенаправление что > file, что 2> file, прогресс пропадает...

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

Добавлено: 2009-06-18 12:05:32
zg
mike345 писал(а):Пробовал я tee.
тебе надо stderr завернуть на stdin а потом только tee

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

Добавлено: 2009-06-18 17:52:42
mike345

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

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, это отдельный повод для флейма

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

Добавлено: 2009-06-18 20:48:24
mike345
Спасибо, помогло! :smile: