Domanda

Mi chiedo come si potrebbe fare per reindirizzare lo stdin di uno script dalla sessione xterm corrente, ad esempio / dev / pts / 0 a uno che è anche in esecuzione, ad esempio / dev / pts / 1 usando bash? Ho uno script bash che apre 3 finestre xterm e voglio ottenere input da solo una di quelle finestre e non riesco a capire come farlo. Qualsiasi aiuto è apprezzato! grazie.



MODIFICA (spostato dal basso - OP ha inviato questo chiarimento come risposta)

Immagino che avrei dovuto chiarire cosa volevo fare. Inizierò uno script da un pty, diciamo che è / dev / pts / 3. Questo script aprirà 3 xterminali, diciamo: / dev / pts / 0, / dev / pts / 1 e / dev / pts / 2. Questi 3 nuovi pty sono ciò che l'utente vedrà. Lo script richiede all'utente alcuni input e voglio che gli input dell'utente vengano digitati in / dev / pty / 1 e il programma dovrebbe ottenere le informazioni da lì. Tuttavia, ho provato a farlo e non funziona. Ecco uno snippet del mio codice.

exec</dev/pts/1

echo
echo "Would you like to search for more info?" 1>/dev/pts/1
read answer

case $answer in
    y) echo "YES" ;;
    n) echo "NO"  ;;
    *) echo "y/n only!";;
esac

L'istruzione case alla fine è solo un piccolo segnaposto per vedere se l'input ha effettivamente funzionato.

È stato utile?

Soluzione

Sospetto che ciò non sia possibile. AFAIK, senza modificare qualcosa nello spazio del kernel, è impossibile leggere l'input da un tty (o pty) che non è l'attuale tty. Anche il root non può farlo. Ho passato un po 'di tempo a esaminare questo e non sono stato in grado di scoprire come farlo, ma ho trovato molte fonti affermando che era impossibile. Questa sembra essere stata una decisione di progettazione per aumentare la sicurezza / la privacy degli utenti.

Altri suggerimenti

Forse potresti modificare ttyecho per le tue esigenze?

# /dev/ttysXXX is the result of the tty command in another Terminal window
sudo ttyecho -n /dev/ttysXXX pwd

E forse netcat potrebbe essere combinato con nc (o ncat) o <=> (che fa parte di nmap) per comunicare tra diverse tty?

Per ulteriori informazioni, consultare:

Per rispondere alla tua domanda chiarita, un modo semplice è usare un FIFO (chiamato pipe) per il lavoro. Sul terminale di invio:

mkfifo ./myfifo
read var
echo "var" > myfifo

Sul terminale di ricezione:

read line < ./myfifo

Per stampare semplicemente un altro xterm dal tuo, nel ricevere xterm:

$ tty
/dev/pts/2

Nell'invio di xterm:

$ echo howdy doody > /dev/pts/2

O da uno script nel xterm di invio, reindirizzando stdin come hai chiesto:

$ cat > /dev/pts/2

Devi scrivere le autorizzazioni per scrivere su / dev / pts / 2 se lo stai facendo su tutti gli utenti.

Non è possibile acquisire ciò che è stato stampato in questo modo sul terminale ricevente. Non esiste un metodo di reindirizzamento incorporato per acquisire l'input da un altro terminale.

Se si desidera che un xterm di invio trovi un modo automatizzato per scoprire il dispositivo di carattere di quello ricevente, è possibile rispondere in diversi modi a seconda del tipo di comunicazione tra processi che si desidera utilizzare. Un semplice trucco sarebbe per il destinatario fare tty & Gt; file1 e il mittente per fare l'eco qualunque sia > $ (cat file1).

Se vuoi provare a dirigerlo dal destinatario anziché dal mittente, hai di nuovo un problema di comunicazione tra processi che può essere risolto in diversi modi.

è semplice devi solo capire

ls -ls / dev / pts vedrai

0 1 2 3 4 supponiamo che tu ne apra diverse

ora usa uno NON 4 e digitare cat < / Dev / pts / 4 o exec < cat / dev / pts / 4

e digita qualcosa nel quarto ora sai cosa succede

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