57 lines
1.2 KiB
Bash
57 lines
1.2 KiB
Bash
|
#!/bin/bash
|
||
|
# -*- mode: sh; tab-width: 8; coding: utf-8-unix -*-
|
||
|
exit 0
|
||
|
ROLE=base
|
||
|
usage="
|
||
|
Usage:
|
||
|
wall [options] [message]
|
||
|
|
||
|
Write a message to all users.
|
||
|
|
||
|
Options:
|
||
|
-n, --nobanner do not print banner
|
||
|
-h, --help display this help and exit
|
||
|
"
|
||
|
|
||
|
SHORT=nh
|
||
|
LONG=nobanner,help
|
||
|
|
||
|
PARSED=$(getopt --options $SHORT --longoptions $LONG --name "$0" -- "$@")
|
||
|
if [[ $? -ne 0 ]]; then
|
||
|
echo "$usage"
|
||
|
exit 2
|
||
|
fi
|
||
|
eval set -- "$PARSED"
|
||
|
|
||
|
while true; do
|
||
|
case "$1" in
|
||
|
-n|--nobanner)
|
||
|
n=y
|
||
|
shift
|
||
|
;;
|
||
|
-h|--help)
|
||
|
echo "$usage"
|
||
|
exit 0
|
||
|
;;
|
||
|
--)
|
||
|
shift
|
||
|
break
|
||
|
;;
|
||
|
*)
|
||
|
exit 3
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
ps -ef | grep " pts/" | awk '{print $6}' | sort -u > /tmp/terminals_$$.tmp
|
||
|
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" >> /tmp/terminals_$$.tmp
|
||
|
if [ "$n" ]; then
|
||
|
pre=""
|
||
|
post=""
|
||
|
else
|
||
|
pre="-e \nBroadcast message from $(whoami)@$(hostname) ($(ps ax | grep "^$$" | awk '{ print $2 }')) ($(date +"%a %b %d %H:%M:%S %Y")):\n\n"
|
||
|
post='\n'
|
||
|
fi
|
||
|
cat /tmp/terminals_$$.tmp | while read TTY_TO; do echo $pre"$*"$post | sudo tee /dev/$TTY_TO 1>/dev/null; done
|
||
|
rm /tmp/terminals_$$.tmp
|