我试过这段代码:
ls | while read file; do mpg123 "$file" || break; done
但是当我按 CTRL + C 时,它会播放下一首歌曲。我怎样才能打破 CTRL + C ?
答案 0 :(得分:3)
您的问题是当您按 ctrl-c (SIGINT
)时,mpg123
是抓住它的那个,并返回状态为0
,所以你的shell不会收到信号,所以它不会中止循环。
你可以按 ctrl-c 直到播放停止以突破循环。
或使用其他玩家。例如,mplayer
似乎在 ctrl-c 上以状态1
退出,因此应该可以正常工作。
也就是说,您可以使用xargs
:
ls | xargs -d '\n' -n 1 mplayer
答案 1 :(得分:1)
如果由于某种原因,您更喜欢使用while循环,例如你想要打印出文件名或以某种方式更改它,然后你可以通过先设置进程然后wait
为它来使bash陷入SIGINT(Ctrl + C),现在wait
将是一个捕获SIGINT而不是process
:
#!/bin/bash
find . -type f -print0 |
while read -r -d '' f; do
echo "$f"
process "$f" > "$f.processed" &
wait $!
done
(find -print0
read -d ''
将支持带有换行符和其他内容的奇怪文件名,添加-maxdepth 1
以查找是否要排除子目录)