버그: "watch &"가 스크립트에서 작동하지 않습니다.

버그: "watch &"가 스크립트에서 작동하지 않습니다.

누군가 나에게 이메일을 보낼 때 알려주는 다음 스크립트가 있습니다.

cd /var/mail
watch -g ls && cat end
./alert

end빈 파일이 될 것입니다. 집에 도착하면 end다른 쉘에서 파일을 수정하고 스크립트는 -g스위치로 끝납니다.

그런 다음 다른 셸을 여는 대신 집에 갈 시간을 스크립트에 알려주면 스크립트가 end그 시간에 자체적으로 파일을 수정할 수 있다는 것을 깨달았습니다. 이 작업을 수행하고 watch백그라운드로 보내면 스크립트가 예상대로 종료됩니다. 그러나 스크립트가 종료된 후 쉘이 이상하게 동작하기 시작합니다. 가장 간단한 오류 예:

( watch -g cat end ) &
sleep 2
echo y >> end

이 오류를 방지하려면 다른 응용 프로그램을 사용해야 할 것 같습니다. 그러나 이 문제는 내 모든 시스템(Debian)에 존재하는 bash것 같습니다 .konsole

위 코드를 명령줄에서 직접 실행하면 예상대로 작동하는 것 같다는 점을 덧붙여야겠습니다. 이 이상한 동작은 스크립트 내에서 실행할 때만 발생합니다.

답변1

동시에 두 개의 프로세스가 화면에 기록되면 혼란이 발생할 수 있습니다. 추가해 보세요

reset

그런 다음 echo y터미널을 다시 정상으로 재설정해야 합니다. 재설정 후에 시계가 실행되지 않도록 하기 전에 짧은 절전 모드를 추가할 수도 있습니다.

고쳐 쓰다:출력에 관심이 없다면 watchstdout 및 stderr을 어디로든 리디렉션하세요.

( watch -g cat end >& /dev/null ) &

이렇게 하면 화면이 어수선해지지 않고 재설정이 필요하지 않습니다.

관련 정보