2011-10-31 4 views
2

J'essaie de catcher un fichier distant sur ssh et de le traiter en script local ligne par ligne. Jusqu'à présent, j'ai essayé ceComment obtenir des entrées de chat sur ssh en Perl

open(INPUT,"| ssh [email protected] cat /dir1/dir2/file.dat") 

mais évidemment, il imprime uniquement le fichier.dat au STDOUT.

Je sais que je peux probablement scp le fichier et le processus, mais ...

Répondre

3

Vous tuyauterie dans ssh. Je pense que vous voulez déplacer le tuyau à l'autre extrémité afin que vous puissiez lire la sortie de cette commande cat.

+0

yeaaaah, je l'ai trouvé moi-même par la méthode d'essai/erreur :-D, mais que beaucoup de toute façon – taiko

1

J'utiliser

$file_contents = `ssh [email protected] cat /dir1/dir2/file.dat`; 
@lines = split(/\n/, $file_contents); 
. 
. 
. # process the file contents 

qui capture la sortie de la commande (à savoir le contenu du fichier).

+1

Pourquoi ne pas simplement dire '@lines = qx/ssh ... /' (en utilisant qx ici au lieu de backticks pour éviter Le marquage de SO)? Cela fonctionnera et se divisera en même temps (bien que cela préserve les \ n). Cela dit, c'est moins efficace. Si le fichier est très volumineux, vous devrez tout charger dans la mémoire pour y faire face. Si la connexion est très lente, vous devrez attendre que l'ensemble du chargement se fasse avant de le traiter. La solution de l'OP, une fois fixée, ne souffre pas de ces problèmes. Backticks sont généralement à éviter, selon mon expérience. – Tanktalus

+0

merci pour la perspicacité :) – djhaskin987

Questions connexes