Pregunta

Me pregunto cómo se podría redirigir el stdin de un script desde la sesión xterm actual, es decir, / dev / pts / 0 a una que también se está ejecutando, es decir, / dev / pts / 1 usando bash. Tengo un script bash que abre 3 ventanas xterm y quiero obtener información de solo una de esas ventanas y no puedo entender cómo hacerlo. Cualquier ayuda es apreciada! gracias.



EDITAR (movido desde abajo - OP envió esta aclaración como respuesta)

Creo que debería haber aclarado lo que quería hacer. Comenzaré un script desde una pty, digamos que es / dev / pts / 3. Este script abrirá 3 xterminals, digamos: / dev / pts / 0, / dev / pts / 1 y / dev / pts / 2. Estos 3 nuevos ptys son lo que el usuario va a ver. El script le pide al usuario alguna entrada y quiero que la entrada del usuario se escriba en / dev / pty / 1 y el programa debería obtener su información desde allí. Sin embargo, he intentado hacer esto y no funciona. Aquí hay un fragmento de mi código.

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 declaración del caso al final es solo un pequeño marcador de posición para ver si la entrada realmente funcionó.

¿Fue útil?

Solución

Sospecho que esto no es posible. AFAIK, sin modificar algo en el espacio del kernel, es imposible leer la entrada de un tty (o pty) que no es el tty actual. Incluso la raíz no puede hacerlo. Pasé un tiempo investigando esto y no pude averiguar cómo hacerlo, pero encontré muchas fuentes que decían que era imposible. Esto parece haber sido una decisión de diseño para aumentar la seguridad / privacidad de los usuarios.

Otros consejos

¿Quizás podría ajustar ttyecho según sus necesidades?

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

¿Y quizás netcat podría combinarse con nc (o ncat) o <=> (que es parte de nmap) para comunicarse entre diferentes ttys?

Para más información ver:

Para responder a su pregunta aclarada, una manera simple es usar un FIFO (canalización con nombre) para el trabajo. Al enviar el terminal:

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

En el terminal receptor:

read line < ./myfifo

Para imprimir simplemente otra xterm de la suya, al recibir xterm:

$ tty
/dev/pts/2

Al enviar xterm:

$ echo howdy doody > /dev/pts/2

O desde un script en el xterm de envío, redirigiendo stdin como usted preguntó:

$ cat > /dev/pts/2

Tienes que cambiar los permisos para escribir en / dev / pts / 2 si lo haces entre usuarios.

No puede capturar lo que se imprime de esta manera en el terminal receptor. No existe un método de redireccionamiento integrado para capturar la entrada desde otro terminal.

Si desea una forma automatizada para que el xterm remitente descubra el dispositivo de caracteres del receptor, se podría responder de varias maneras dependiendo del tipo de comunicación entre procesos que desee utilizar. Un simple truco sería que el receptor hiciera tty & Gt; file1 y el remitente para hacer eco lo que sea > $ (archivo cat1).

Si desea intentar dirigir esto desde el receptor en lugar del remitente, nuevamente tiene un problema de comunicación entre procesos que se puede resolver de varias maneras.

es simple solo necesitas entender

ls -ls / dev / pts verás

0 1 2 3 4 supongamos que abres varios

ahora usa uno NO 4 y escribe gato < / dev / pts / 4 o exec < cat / dev / pts / 4

y escribe algo en 4 th one ahora sabes lo que pasa

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top