当测试在 while 循环内失败时,我很难追踪我的“布尔值”标志变量不会保持错误的原因。
该脚本涉及几个循环,但本质上它旨在每天早上在由 cron 触发时播放两张随机专辑。我曾经有一个简单的单行脚本,可以选择两张专辑,但我想将所有不想播放的专辑(即圣诞音乐专辑)列入黑名单。
为此,我让它读取了一个带有我不想听到的专辑名称的wakeUp_blacklist.txt 文件,因此它可以拒绝任何匹配。这将逐行将列入黑名单的专辑与随机选择的专辑进行比较并测试是否匹配。如果找到匹配项,它会将匹配项标记为失败 ( pass = false
) 并且应该循环返回并选择不同的专辑。出于某种原因,一旦执行退出read | while
循环,标志就会切换回 true,因此永远不会选择另一个专辑!
这是我的代码和示例输出:
#!/bin/bash
wd="/media/External1/albums"
pass="false"
for ((i=0; i<=1; i++)); do
while [ "$pass" == "false" ]; do
album=`ls -d "$wd"/*/*/ | sort -R | tail -n 1`
echo "album selected:"
echo "$album"
pass="true"
echo "pass reset; pass=$pass"
cat "$wd/wakeUp_blacklist.txt" | while read black; do
echo "pass check 2:$pass"
echo "black: $wd/$black"
if [ "$album" == "$wd/$black" ] || [ "$album\n" == "$albums" …
Run Code Online (Sandbox Code Playgroud)