我从网上收集了很多笔记,并编写了 bash 脚本来管理它们。
我有一些脚本依赖于select
制作菜单。
问题:在嵌套菜单上下文中,是否可以恢复到脚本中的先前菜单?我有一种强烈的感觉,这可能是不可能的,但我发布这篇文章是希望有办法。
解释一下我的意思:假设用户对 menu-1 做出选择,然后它决定随后的 menu-2 中显示的内容。如果用户在菜单 2 中选择“完成”,是否有循环设备将用户带回菜单 1?
下面的脚本包含 3 个选择 - 我希望能够从第 3 个选择恢复到第 2 个选择:
curd=($(ls)); # array
select dirup in ${curd[@]} done
do
cd $dirup;
ar=($(ls | awk -F"." '{ print $1 }' | awk -F"-" '{ for(i=2; i<=NF; i++) print $i }' | sort | uniq));
select choice in ${ar[@]} done # select list
do
echo "you selected: $choice"
[[ $choice == "done" ]] && exit
ar=($( find . -type f -maxdepth 1 -name "*$choice*" ));
((cnt=${#ar[@]}+1))
select ntit in ${ar[@]} done
do
echo "choice is:[ $REPLY ]"
for i in $REPLY; # $REPLAY contains numbers
do
if [ $i -lt $cnt ]
then
((var=$i-1));
open ${ar[$var]};
else
exit
fi
done
done
done
done
答案1
使用break
而不是exit
.但请注意,返回上级菜单时不会重新打印菜单。
例子:
select x in nothing inner quit ; do
[[ $x == quit ]] && break
if [[ $x == inner ]] ; then
select y in NOTHING BACK ; do
[[ $y == BACK ]] && break
done
fi
done