我在 stackexchange 上发现了类似的问题,但距离我的案例还不够近,无法提供帮助。
我正在尝试创建一个脚本并将其绑定到一个键,这样当按下时,它会显示“ title
by artist
”,或者,如果没有艺术家/标题,它会显示“ filename
”。
Cmus(我选择的音乐播放器)cmus-remote
与-C
(原始)选项配对,让我可以查询 cmus 播放器的任何内容并获得换行符分隔的响应,例如:
cmus-remote -C 'format_print %a %t %F'
Beach House
Space Song
/home/user/Music/Beach House - Space Song.mp3
问题是,我不想运行cmus-remote
每个查询,而是更喜欢
IFS= read -r artist title file << EOF
$(cmus-remote -C 'format_print %a %t %F')
EOF
但是,仅提供artist
和 ,title
并且file
为空注意:删除该-r
选项在这种情况下没有帮助,修改IFS
.
详细说明:我的音乐文件夹没有完全标记,即有些歌曲没有艺术家或标题,所以这个脚本的想法是在 exec 上发送通知“正在播放title
” artist
,如果没有标题或艺术家“正在播放” filename
' 所以我需要三个变量来评估要发送的通知。
答案1
我只需要阅读每个换行符,即
cmus-remote -C 'format_print %a %t %F' |
while IFS= read -r artist; IFS= read -r title; IFS= read -r file
do
echo "a:$artist"
echo "t:$title"
echo "f:$file"
done
运行一次并回显正确的值,为什么IFS=$'\n'
不像你认为的那样表现超出我的范围,我会接受三读