백그라운드에서 실행되는 cron 작업에서 실행하고 열려 있는 터미널에 명령을 사용하여 결과를 알리는 간단한 스크립트를 설정하려고 합니다 wall
. 그러나 테스트할 때 전혀 출력이 나오지 않습니다. 저는 Microsoft의 터미널 애플리케이션을 통해 WSL Ubuntu와 zsh를 사용합니다.
다음을 실행 tty
하고 반환하며 아무것도 반환하지 않습니다.w
who
hardya@GBH-HARDYA1 ~ tty
/dev/pts/4
hardya@GBH-HARDYA1 ~ w
09:16:01 up 3 days, 4:30, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
어떤 아이디어가 있나요?
답변1
@EdgarMagallon의 의견 중 두 가지가 정확합니다.
- 이것예
who
위에서 언급한 명령 문제와 관련됨우분투에 물어보세요 - 이 답변의 소유자(나)는... ;-)
wall
네, 그렇습니다. 이 명령은 로그인한 사용자와 해당 터미널을 확인하기 위해 동일한 메커니즘을 사용하는 것 같습니다 .who
따라서 WSL2에서 작동하게 하려면 다음을 수행하십시오.
에서 사용할 수 있는 최신 버전의 WSL이 필요합니다
wsl --version
. 로 돌아가는 경우invalid command
Windows가 완전히 업데이트되었는지 확인한 다음 새 버전을 설치하세요.Linux용 Windows 하위 시스템마이크로소프트 스토어에서.설명된 대로 Systemd를 활성화합니다.이 답변
WSL을 다시 시작하고 Systemd가 활성화되었는지 확인한 후 실행하여
su - $USER
사용자가 강제로 "로그인"하도록 합니다.그런 다음 다른 터미널에서 다음을 실행할 수 있습니다.
sudo wall Wallaby # Or a real message
로그인한 터미널에 표시되어야 합니다. 이는
sudo
많은 배포판에 필요하다는 점을 명심하십시오 . 예전에는 이랬었지wall
setguid
우분투와 데비안 에서, 하지만 더 이상 그렇지 않은 것 같습니다.w
그리고who
로그인한 사용자도 표시되어야 합니다.
물론 WSL은 원하는 스크립트를 구현하는 데 반드시 도움이 되는 것은 아닙니다.힘로그인. 몇 가지 가능성:
su - $USER
알림을 받으려는 셸에 강제로 로그인하세요.파일(또는 fifo?)을 감시하고 (지워질 때까지) "완료" 메시지로 프롬프트를 업데이트하는 Zsh 프롬프트 함수를 작성하세요. Fish에서는 이것이 더 쉽다고 생각하지만 Zsh(또는 Bash)에서도 가능하다고 확신합니다.
tmux
터미널에서 실행하고tmux display-message
일치 항목을 알리는 데 사용됩니다.