Как получить ввод от cat через ssh в Perl

#perl #input #ssh #pipe

#perl #ввод #ssh #канал

Вопрос:

Я пытаюсь получить удаленный файл через ssh и обработать его в локальном скрипте построчно. До сих пор я пробовал это

 open(INPUT,"| ssh user@host cat /dir1/dir2/file.dat")
  

но, очевидно, это только печать файла.dat в стандартный вывод.

Я знаю, что, вероятно, я могу просто скопировать файл и обработать его, но…

Ответ №1:

Вы подключаетесь к ssh. Я думаю, вы хотите переместить канал на другой конец, чтобы вы могли прочитать выходные данные этой команды cat.

Комментарии:

1. даааа, просто нашел это сам методом проб / ошибок:-D, но в любом случае вам очень нравится

Ответ №2:

Я бы использовал

 $file_contents = `ssh user@host cat /dir1/dir2/file.dat`;
@lines = split(/n/, $file_contents);
.
.
. # process the file contents
  

Это фиксирует выходные данные команды (т. Е. Содержимое файла).

Комментарии:

1. Почему бы просто не сказать @lines = qx/ssh .../ (используя qx здесь вместо обратных ссылок, чтобы избежать пометки SO)? Это будет выполняться и разделяться одновременно (хотя при этом будут сохранены n). Тем не менее, это менее эффективно. Если файл очень большой, вам придется загрузить все это в память, чтобы справиться с этим. Если соединение очень медленное, вам придется подождать, пока все загрузится, прежде чем обрабатывать что-либо из этого. Решение OP, когда оно исправлено, не страдает ни от одной из этих проблем. По моему опыту, обычно следует избегать обратных ссылок.