안녕하세요, bash에 문제가 있습니다. 백그라운드에서 작동하는 "스크립트"가 필요하며 sleep 60은 사용자(로그인이 매개변수로 추가됨)가 서버에서 작업 중인지 확인합니다. 사용자가 로그인하면 "hello" 기호가 표시되어야 합니다. person 온라인 사인입니다. "죄송합니다. 번역 연습이 좀 어렵습니다.
#!/bin/sh
who | cut -d " " -f1 | grep $1> /dev/null
z=$?
until [ $z -eq 0 ] ; do
sleep 10
who | cut -d " " -f1 | grep $1> /dev/null
z=$?
done
echo "hello $1" | write $1
학교 서버 대신 내 컴퓨터에서 실행해 보았습니다. 가능합니까? 이것이 내가 돌려받는 것입니다:
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
답변1
이것은 내 버전의 스크립트입니다.
#!/bin/sh
if [ $# -lt 1 ]
then echo Missing user name; exit 1
elif ! grep -q $1 /etc/passwd
then echo No such user: $1; exit 2
fi
until who | cut -d " " -f1 | grep -q $1
do sleep 10
done
echo "hello $1" | write $1
먼저 유효한 사용자 이름이 존재하는지 확인하는 검사를 추가했습니다.
이 until
키워드에는관로, test
라고도 하는 프로그램 [
이 될 수 있습니다. 그러나 나는 방금 who|cut|grep
파이프를 사용했습니다. 종료 상태가 0이면 루프가 중지됩니다. 0이 아니면 루프가 계속됩니다.
또 다른 아주 사소한 변경 사항이 추가되었습니다 -q
. 내 개인적인 의견으로는 이것이 /dev/null로 리디렉션하는 것과 동일한 결과를 얻는 더 좋은 방법입니다.