我正在尝试将目录中的文件用作bash脚本中的选项。用户应该能够选择一个,然后将所选文件的名称传递给变量。到目前为止,我可以获取文件列表,但经过几个小时的尝试后,我无法弄清楚如何将它们显示为选项。
#!/bin/bash
prompt="Please select a file:"
options=( $(find -maxdepth 1 -print0 | xargs -0) )
PS3="$prompt "
select opt in "${options[@]}" "Quit"; do
case "$REPLY" in
for i in "${options[@]}"
do
$i' ) echo "You picked $opt which is file $REPLY";;'
done
$(( ${#options[@]}+1 )) ) echo "Goodbye!"; break;;
*) echo "Invalid option. Try another one.";continue;;
esac
done
非常感谢任何帮助。谢谢!
答案 0 :(得分:24)
我认为case
不适用于此:
#!/bin/bash
prompt="Please select a file:"
options=( $(find -maxdepth 1 -print0 | xargs -0) )
PS3="$prompt "
select opt in "${options[@]}" "Quit" ; do
if (( REPLY == 1 + ${#options[@]} )) ; then
exit
elif (( REPLY > 0 && REPLY <= ${#options[@]} )) ; then
echo "You picked $opt which is file $REPLY"
break
else
echo "Invalid option. Try another one."
fi
done
ls -ld $opt
答案 1 :(得分:0)
不要错过percol,fzy,smenu和朋友。他们乐意从stdin中获取,提供一个用户友好的选择菜单和交互式过滤器,然后再选择管道。