2011-01-07 14 views
6

Ho scritto un'applicazione Java che ha un istante (input.readLine()) che continua a leggere l'input fino a quando l'utente digita un comando di uscita. Ho uno script .bat per avviarlo in Windows e un file .sh per avviarlo in Linux. L'applicazione funziona bene in entrambi.Come si accettano gli input freccia sinistra/destra/su/giù in una shell Linux?

Mentre in Windows, se si digita un comando come "controllare la posta" e premere invio, eseguirà il comando. Quindi, al prompt successivo (ovvero: la volta successiva che l'applicazione Java legge una riga di input) è possibile premere la freccia su e richiama il comando "check email". Puoi premere il tasto freccia sinistra per spostare il cursore a sinistra, ecc. Questo è esattamente il modo in cui lo voglio.

Su Linux, tuttavia, premendo il tasto su, viene visualizzato^[[D per visualizzare. I tasti freccia sinistra e destra producono un output ASCII simile, come^[[C.

Ho sentito parlare di stty e ho visto le pagine man, ma non riesco a capire cosa ho bisogno di cambiare nello script .sh con la mia applicazione Java. Qualcuno può aiutarmi?

risposta

1

La funzione readline viene utilizzata per questa roba su Unix, ma è una funzione C.

Here è possibile trovare un wrapper Java per esso. (Non l'ho mai usato)

4

La soluzione più semplice consiste nell'utilizzare un wrapper esterno che legge una riga con funzionalità di edizione, quindi lo invia al programma. Un buon wrapper è rlwrap.

L'utilizzo di uno strumento separato è in linea con la filosofia unix dell'uso di strumenti separati per scopi separati (edizione in linea e qualsiasi sia il programma). È anche semplice: basta fare in modo che il wrapper shell funzioni rlwrap myprogram anziché myprogram.

il sottostante readline library (nessuna relazione a qualsiasi readLine metodo in Java, si vorrà un wrapper Java come ad esempio Java-Readline) è più lavoro di integrazione, e costringe il vostro programma per essere GPL. Scegli quello solo se desideri qualcosa di più di quello che un wrapper può fornire, in particolare i completamenti specifici dell'applicazione.

Problemi correlati