Как лучше всего захватывать и регистрировать выходные данные scp?

StackOverflow https://stackoverflow.com/questions/202432

  •  03-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь записать выходные данные сценария установки (который использует scp) и записать их в журнал.Однако я не получаю всего, что распечатывает scp, а именно индикатор выполнения.

вывод на экран:

Копирование/user2/cdb/builds/tmp/uat/myfiles/* server/users/myfiles as cdb

пароль cdb@server:myfile 100% | *************************** 2503 00:00

вывод журнала:

Копирование/user2/cdb/builds/tmp/uat/myfiles/* server/users/myfiles as cdb

Мне бы очень хотелось знать, что мой файл попал туда.Вот что я пытаюсь сейчас, но безрезультатно:

myscript.sh 2> & 1 | Tee mylogfile.log

Есть ли у кого-нибудь хороший способ захвата вывода scp и его регистрации?

Спасибо.

Это было полезно?

Решение

Похоже, вы просто не упустили из журнала, был ли scp успешным или нет.

Я предполагаю, что полоса прокрутки не выводится на стандартный вывод и использует ncurses или какой-то другой TUI?

Вы можете просто посмотреть возвращаемое значение scp, чтобы убедиться, что оно было успешным.Нравиться

scp myfile user@host.com:. && echo success!

man scp говорит

scp exits with 0 on success or >0 if an error occurred.

Другие советы

scp печатает индикатор выполнения на терминале, используя управляющие коды.Он определит, перенаправляете ли вы вывод и, таким образом, опускаете индикатор выполнения.

Вы можете обойти это, обманув scp, заставив его думать, что он работает в терминале, используя команду «script», которая по умолчанию установлена ​​в большинстве дистрибутивов:

script -q -c "scp server:/file /tmp/" > /tmp/test.txt

Содержимое test.txt будет:

file    0%    0     0.0KB/s   --:-- ETA
file   18%   11MB  11.2MB/s   00:04 ETA
file   36%   22MB  11.2MB/s   00:03 ETA
file   54%   34MB  11.2MB/s   00:02 ETA
file   73%   45MB  11.2MB/s   00:01 ETA
file   91%   56MB  11.2MB/s   00:00 ETA
file  100%   61MB  10.2MB/s   00:06

...что, вероятно, вам и нужно.

Я столкнулся с этой проблемой при перенаправлении вывода интерактивного сценария в файл журнала.Отсутствие результатов в журнале не было проблемой, поскольку вы всегда можете оценить коды выхода.Но мне очень хотелось, чтобы интерактивный пользователь видел индикатор выполнения.Этот ответ решает обе проблемы.

Может быть, вы можете использовать 'сценарий' для регистрации сеанса терминала.

scp myfile user@host.com:. && echo success! 

это очень полезно, но чтобы записать сообщение в файл журнала, я изменил его вот так

scp myfile user@host.com:. && echo myfile successfully copied! >> logfile 2>&1

И это напишет "Myfile успешно скопировал!" Сообщение в файл журнала.

Пытаться:

scp server:/file /tmp/ > /dev/tty

Я пока не могу комментировать :( поэтому добавлю обновление здесь...

У @Martin было лучшее решение для меня, хотя, если ваша команда scp находится в середине вашего сценария, она выводится может появляются после команд, которые фактически выполнялись впоследствии.

Я думаю, это потому, что скрипт должен запускать команду в подоболочке, но мне еще предстоит проверить.

РЕДАКТИРОВАТЬ:он действительно порождает оболочку, поэтому, если вам нужно, чтобы что-то запускалось (и действительно терпело неудачу) последовательно (как в сценарии сборки), вам придется добавить некоторую логику использования команды сценария.

то есть

скрипт -q -c "ваша команда" && спать 1

или что-то подобное, чтобы ваша родительская оболочка ждала завершения дочерней оболочки, прежде чем двигаться дальше.

Да, я недавно пытался получить вывод в сценарии PHP от proc_open (), я потерял тихое время, пытаясь получить вывод :-) Но здесь немного поздно, и я затем прочитал этот пост здесь заставил меня понять, что мне действительно не нужно этот свалкий вывод в мой сценарий

просто код выхода сделает всю работу :-)

$exit_code = proc_close($process);

$ grep -r "Error" xyz.out > abc.txt

Здесь, в приведенной выше команде, я сохраняю вывод в файл abc.txt.

Этот grep команда предназначена для поиска текста, содержащего Ошибка в файле xyz.out и сохранение вывода в abc.txt без отображения на консоли.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top