Enviar mensajes a otro usuario

64

¿Hay algún comando para enviar mensajes a través del shell de Linux a otras personas en la misma red? Estoy usando write usery luego escribo el mensaje en sí. Pero hay algún comando que no muestra mi nombre de usuario o que estoy tratando de enviarles un mensaje

El comando que estoy usando mostrará esto al usuario que estoy tratando de contactar (código tomado de la web):

Message from [email protected] on pts/1 at 17:11 ...
Ricardo Almeida
fuente

Respuestas:

96

La única forma directa que sé de hacer esto es usar el wallcomando. Esto se puede utilizar para omitir la identificación del remitente, a través del -ninterruptor.

Ejemplo

$ sudo wall -n hi

Remote broadcast message (Fri Nov  8 13:49:18 2013):

hi

usando echo

Este método alternativo es más un truco, ya que no se realiza a través de una herramienta explícita, pero puede enviar un mensaje de texto al terminal de un usuario suponiendo que sepa en cuál está.

Ejemplo

$ w
 13:54:26 up 2 days, 36 min,  4 users,  load average: 4.09, 4.20, 3.73
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
saml     tty1     :0               Wed13    2days  3:55m  0.04s pam: gdm-password
saml     pts/0    :0.0             Wed13   24:16m  0.35s  0.35s bash
saml     pts/1    :0.0             Wed20    0.00s  3.71s  0.00s w
saml     pts/4    :0.0             01:20   12:33m  0.36s  0.05s man rsync

Suponiendo que sabe que el usuario samlestá en uno de los pseudo terminales, puede hacer eco del texto directamente a ese dispositivo. Desde la terminal pts/1:

$ sudo echo "Let's go have lunch... ok?" > /dev/pts/4
$ 

Resultado en pts/4:

$ man rsync
$ Let's go have lunch... ok?
slm
fuente
Pero 'wall' envía el mensaje a todos los usuarios conectados ¿no?
Ricardo Almeida
2
@Exsound - correcto. No hay forma de enviar un mensaje sin su identificación a través de cualquier otro método que haya visto.
slm
1
En mi sistema, syslog está configurado para enviar mensajes con nivel emergente a través del muro, por lo que logger -p emerg hifunciona igual que el primer método anterior (excepto que syslogd se muestra como remitente), pero no necesita sudo.
Michael Suelmann
1
@Exsound: también puede hacer eco directamente al terminal, ver actualización.
slm
@Exsound - de nada, gracias por la Q.
slm
9

Puedes usar esta función :).
Copie ese código en un archivo con nombreSendMessage.sh

#!/bin/bash

SendMessage()
{
    com=`tty`
    set `who am i`
    who | grep -v "$1" >filef.txt

    exec < filef.txt  
    array=""

    while read line
    do
        set $line
        echo $1
        array+=($1)
    done

    rm filef.txt
    exec <$com

    echo "====================>   Select User Number  <===================="
    echo

    select userName in ${array[@]} 
    do
        UserNam=$userName
        if [ -n $UserNam ]; then
            break
        fi
    done

    unset array #Clear the Array

    echo 
    echo

    echo "===================================> Message Body <==================================="

    mesg y
    read -p "put here your Message==> " messagel

    echo $messagel | write $UserNam

    if [ $? -eq 0 ]; then
        echo "It has been sent successfully.............ok"
        #return 0
    else
        echo "Message Failed to send ..............No!!"
        echo "Maybe It is not available for you To send Message To hem "
        return 1
    fi  
}

SendMessage

Cómo usar:
Vaya a Terminal y escriba:

chmod +x SendMessage.sh
./SendMessage.sh

Y puedes enviar un mensaje.

Hajime Beddai
fuente
1
Confirmado como asombroso.
dibs
Súper impresionante, diría.
Anwar