Страница 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, почему полоска прогресса выходит на std
out, а не st
derr, это отдельный повод для флейма
Re: Вывод прогресса и перенаправление stderr в sftp
Добавлено: 2009-06-18 20:48:24
mike345
Спасибо, помогло!
