이것은 질문과 답변 모두에 대한 개선 및 업데이트 요청입니다(중복이 아님!).
현재 Ubuntu 15.04를 사용하고 있으며 이 명령은 who
루트 터미널에서 실행될 때 다음과 같은 출력을 제공합니다. 내 스크립트가 cron 작업으로 사용되기 때문입니다.
sadi :0 2015-10-07 17:32 (:0)
root pts/0 2015-10-07 19:55 (:0)
위에 언급된 질문과 답변을 연구한 후 다음과 같은(약간 업데이트되었지만 완료되지 않은) 줄을 작성했습니다.
#!/bin/bash
xuser=${who | grep -m1 ^.*\) | awk '{print $1}'}
xdisplay=${who | grep -m1 ^.*\) | awk '{print $5}' | sed 's/[(|)]//g'}
DISPLAY="$xdisplay" XAUTHORITY=/home/"$xuser"/.Xauthority su "$xuser" -c "notify-send 'Message'"
왜 이 두 변수가 작동하지 않는지 궁금합니다(주어진 bad substitution
)... 또한 이 스크립트가 다른(예: 다중 사용자) 구성에서 작동하도록 하려면 다른 사용자가 있을 수 있다는 점을 고려해야 한다고 생각합니다. . 그래서 각 사용자와 X 디스플레이에 마지막 명령을 제공하는 루프를 만들어야 할 것 같지만, bash 스크립팅의 초보자로서 어떻게 해야 할지 모르겠습니다...
이 질문에 대한 답을 찾을 때까지 저는 다음과 같은 단일 사용자 스크립트를 사용하고 있습니다.
cuser="${SUDO_USER:-$USER}"
...
DISPLAY=:0 XAUTHORITY=/home/"$cuser"/.Xauthority su "$cuser" -c "notify-send 'Message'"
grep
이 옵션 -m1
도 수정(및 교체)해야 할 것 같습니다 ${...}
. $(...)
이는 출력 상단에서 캡처해야 하는 줄 수만 정의하기 때문입니다.
who
아직 게스트 세션(예: 다중 사용자 환경)이 있을 때 루트 터미널에서 명령을 다시 실행하면 다음과 같은 출력이 제공됩니다.
sadi :0 2015-10-08 10:40 (:0)
guest-bAMpqo :1 2015-10-08 12:22 (:1)
root pts/28 2015-10-08 12:43 (:0)
guest-bAMpqo pts/18 2015-10-08 12:25 (:1)
따라서 X 사용자 목록과 X 표시 이름이 제공됩니다.
#!/bin/bash
xusers=$(who | grep ' :[0-9]' | awk '{print $1}')
xdisplays=$(who | grep ' :[0-9]' | awk '{print $5}' | sed 's/[(|)]//g')
DISPLAY="$xdisplay" XAUTHORITY=/home/"$xuser"/.Xauthority su "$xuser" -c "notify-send 'Message'"
이제 목록을 한 줄씩 캡처하도록 마지막 명령을 수정해야 합니다.
답변1
마침내 나는 이 귀중한 지식 데이터베이스를 직접 검색하여 답을 찾았습니다.StackExchange Unix 및 Linux!!!
위 질문에 대한 답변 외에도 이 질문에 대한 답변도 사용했습니다.두 개의 텍스트 파일을 읽고 각 줄을 연결합니다.
위의 질문에 대한 답변은 다음과 같습니다.
#!/bin/bash
xuser=$(who | grep ' \:[0-9]' | awk '{print $1}')
xdisplay=$(who | grep ' \:[0-9]' | awk '{print $5}' | sed 's/[(|)]//g')
echo "$xuser" > /tmp/xusers.txt
echo "$xdisplay" > /tmp/xdisplays.txt
while read -r -u3 xuser; read -r -u4 xdisplay; do
DISPLAY="$xdisplay" XAUTHORITY=/home/"$xuser"/.Xauthority su "$xuser" -c "notify-send 'Message multi-user'"
done 3</tmp/xusers.txt 4</tmp/xdisplays.txt