变量中的 ls 命令显示在对话框清单中并处理所选选项

变量中的 ls 命令显示在对话框清单中并处理所选选项

我刚刚开始 shell 编程,但无法解决以下问题。

我希望定义的目录(例如/var)中的所有目录都显示在对话框清单中。我还希望在选定的文件夹中存储先前定义的变量(在每个文件夹中都相同)。

有人有解决问题的办法吗?

编辑//

解决方案

#!/bin/bash
DIR="/var"
function cho () {
options=$(ls "$DIR" | awk '{print $1, FNR, "off"}')
cmd=(dialog --title Menu --stdout \
      --separate-output \
      --checklist "Select options:" 22 76 16)
choices=$("${cmd[@]}" ${options})
check
}
function check () {
if [ $? -eq 0 ]; then
   if [ -z "$choices" ]; then
      dialog --title Menu --msgbox "No option selected!" 5 28
      dialog --clear
      cho
else
   for choice in $choices
   do
   echo "$choice"
   done
fi
else
  clear && echo ""Cancel...
fi
}
cho

答案1

#!/bin/sh

dir='/'

select name in $( find "$dir" -type d ! -name "$dir" -maxdepth 1 ); do
    if [ -z "$name" ]; then
        echo 'error' >&2
    else
        break
    fi
done

printf 'User picked "%s"\n' "$name"

这是一个简单的 shell 脚本,列出了下面的目录$dir并向用户提供一个菜单以从中选择一个。

所选条目将存储在 中$name

测试它:

$ sh script.sh
 1) /altroot                             7) /root
 2) /bin                                 8) /sbin
 3) /dev                                 9) /tmp
 4) /etc                                10) /usr
 5) /home                               11) /var
 6) /mnt                                12) /tmp_mnt
#? q
error
#? 0
error
#? 9
User picked "/tmp"

如果任何找到的目录名称包含异常字符(例如换行符),此脚本可能会失败。

相关内容