Domanda

Sto lavorando su un programma che permette di file su un server tramite SFTP, utilizzando JSch .

Non c'è molto di documentazione, ma ho trovato questo (francese) post del blog: Un client SSH versare Java .

Ho appena riesco a capire cosa la variabile TERMINATOR è per:

private static final String TERMINATOR = "zDonez";  

Perché questo uso "zDonez"?

È stato utile?

Soluzione

"zDonez" è una stringa arbitraria che non apparirà nell'output di uno qualsiasi dei comandi eseguiti. Se è così, è necessario selezionare un altro valore per TERMINATOR. Il suo scopo è quello di rilevare quando un comando è in esecuzione finito.

Altri suggerimenti

Come Klas già detto, in questo caso zDonez è semplicemente una stringa che verrà stampata dalla shell remoto dopo il comando originale è stato eseguito.

command += "; echo \"" + TERMINATOR + "\" \n";

In questo modo il metodo getServerResponse() può sapere quando il comando è finito, e restituisce la stringa a destra.

direi che questo non è il miglior uso del tipo di canale shell, che deve essere utilizzato solo per uso interattivo, cioè quando un utente è lì per decidere quando inserire il comando successivo. (La maggior parte delle shell hanno un prompt per questo motivo.)

Un modo migliore sarebbe quella di utilizzare un canale exec individuale per ogni comando (o una serie di comandi), ma allora non è possibile utilizzare i comandi cambia statali analoghi cd o, come ogni canale exec avrà proprio guscio.


Per SFTP, non è necessario per eseguire comandi remoti a tutti - utilizzare un ChannelSftp invece di un canale exec o shell. C'è il Sftp esempio nella distribuzione JSch default, che mostra come utilizzare su una delle operazioni supportate da questa classe.

Una documentazione più generale è nel JSch manuale nel wiki .

(Disclaimer: Ho scritto questo inofficial JSch Javadoc ( sulla base delle fonti ufficiali), e anche la maggior parte del testo nel Manuale Wiki).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top