나는 함수의 출력을 에 전달하고 less
잠시 기다렸다가 를 죽이는 스크립트를 작성하고 있습니다 less
. 이 모든 작업은 루프 내에서 수행됩니다. 이렇게 하면 less
동적으로 업데이트되는 것처럼 보입니다 . 이것은 내 스크립트입니다.
#!/usr/bin/env bash
for i in {0..5}; do
echo $i | less -c &
pid=$!
sleep 2
kill $pid &>/dev/null
done
이는 예상대로 작동하지만 이후에는 터미널이 응답하지 않게 됩니다(예: 키 입력이 표시되지 않음). 내가 뭘 잘못했나요?
편집하다:글쎄요, 제가 질문한 방식이 혼란스러운 것 같아요. 뮤직 플레이어의 현재 노래를 기반으로 웹사이트에서 가사를 제거하는 스크립트를 작성하려고 합니다. 내가 원하는 방식은 이 스크립트를 스크린 세션 내에서 실행하고 30초마다 자동으로 업데이트되도록 하는 것입니다. 최종 스크립트는 다음과 같습니다.
function get_lyrics()
{
# function which gets the lyrics based on current song
}
while true; do
song=$(get_lyrics)
echo "$song" | less -c &
pid=$!
sleep 30
kill $pid &>/dev/null
done
답변1
스크립트 파일을 만들고 다음 내용을 넣으세요. 파일에 가사를 쓰게 됩니다./tmp/lyrics
while true; do
get_lyrics >/tmp/lyrics
sleep 30
done
이제 이 스크립트를 백그라운드로 보내고 다음 명령을 실행하면 원하는 작업을 더 깔끔하게 수행할 수 있습니다.
watch -n 30 less -c /tmp/lyrics