Question

Je me demande comment on pourrait rediriger le stdin d'un script de la session xterm en cours, à savoir / dev / pts / 0 vers un autre qui exécute également i.e / dev / pts / 1 en utilisant bash? J'ai un script bash qui ouvre 3 fenêtres xterm et je souhaite obtenir des entrées à partir d'une seule de ces fenêtres et je ne sais pas comment le faire. Toute aide est appréciée! merci.



MODIFIER (déplacé depuis le bas - OP a fourni cette clarification comme réponse)

J'imagine que j'aurais dû préciser ce que je voulais faire. Je vais commencer un script à partir d'un pty, disons que c'est / dev / pts / 3. Ce script ouvrira 3 xterminals, disons: / dev / pts / 0, / dev / pts / 1 et / dev / pts / 2. Ces 3 nouveaux ptys sont ce que l'utilisateur va voir. Le script demande à l'utilisateur de saisir certaines informations et je souhaite que celles-ci soient saisies dans / dev / pty / 1 et que le programme obtienne ses informations à partir de là. Cependant, j'ai essayé de le faire et cela ne fonctionne pas. Voici un extrait de mon code.

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

La déclaration de cas à la fin est juste un petit espace réservé pour voir si l'entrée a réellement fonctionné.

Était-ce utile?

La solution

Je soupçonne que ce n'est pas possible. Autant que je sache, sans modifier quelque chose dans l'espace du noyau, il est impossible de lire l'entrée d'un tty (ou pty) qui n'est pas le tty actuel. Même root ne peut pas le faire. J'ai passé un peu de temps à étudier cela et je n'ai pas pu trouver comment le faire, mais j'ai trouvé de nombreuses sources affirmant que c'était impossible. Cela semble avoir été une décision de conception visant à accroître la sécurité / confidentialité des utilisateurs.

Autres conseils

Peut-être pourriez-vous adapter ttyecho à vos besoins?

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

Et peut-être que netcat pourrait être combiné avec nc (ou ncat) ou <=> (qui fait partie de nmap) pour communiquer entre différents ttys?

Pour plus d'informations, voir:

Pour répondre à votre question clarifiée, un moyen simple consiste à utiliser une FIFO (canal nommé) pour le travail. Sur le terminal d’envoi:

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

Sur le terminal de réception:

read line < ./myfifo

Pour simplement imprimer un autre xterm à partir de votre propre, en recevant xterm:

$ tty
/dev/pts/2

En envoyant xterm:

$ echo howdy doody > /dev/pts/2

Ou à partir d'un script dans le xterm d'envoi, en redirigeant stdin comme vous l'avez demandé:

$ cat > /dev/pts/2

Vous devez modifier les autorisations pour écrire dans / dev / pts / 2 si vous le faites entre utilisateurs.

Vous ne pouvez pas capturer ce qui est imprimé de cette manière sur le terminal de réception. Il n'y a pas de méthode de redirection intégrée pour capturer l'entrée d'un autre terminal.

Si vous voulez un moyen automatisé pour le xterm d'envoi de rechercher le périphérique de caractères du destinataire, vous pouvez y répondre de plusieurs manières en fonction du type de communication interprocessus que vous souhaitez utiliser. Un simple hack serait que le récepteur fasse tty & Gt; fichier1 et l'expéditeur à faire écho quel que soit > $ (cat file1).

Si vous voulez essayer de diriger ceci depuis le destinataire au lieu de l'expéditeur, vous avez à nouveau un problème de communication interprocessus qui peut être résolu de plusieurs manières.

c'est simple vous avez juste besoin de comprendre

ls -ls / dev / pts vous verrez

0 1 2 3 4 supposons que vous ouvriez plusieurs

utilise maintenant un not 4 et le type chat < / dev / pts / 4 ou exec < cat / dev / pts / 4

et tapez quelque chose dans le 4 ème vous savez maintenant ce qui se passe

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top