我正在编写一个脚本,其中将函数的输出传递给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