#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, когда оно исправлено, не страдает ни от одной из этих проблем. По моему опыту, обычно следует избегать обратных ссылок.