Prompt user to select a directory with a bash script and read result

前端 未结 3 1508
情深已故
情深已故 2020-12-28 18:41

I want to be read a dir with a bash script (actually I am using zsh).

I want to list the current folders in the same dir and display it to the user asking them to en

相关标签:
3条回答
  • 2020-12-28 18:50

    Unless your formatting requirements are very strict, you can probably just use bash’s select construct.

    The following code will present a menu of all the directories in the current directory and then chdir to the selected one:

    #!/bin/bash
    printf "Please select folder:\n"
    select d in */; do test -n "$d" && break; echo ">>> Invalid Selection"; done
    cd "$d" && pwd
    
    0 讨论(0)
  • 2020-12-28 18:52
    #!/bin/bash
    
    dirs=(*/)
    
    read -p "$(
            f=0
            for dirname in "${dirs[@]}" ; do
                    echo "$((++f)): $dirname"
            done
    
            echo -ne 'Please select a directory > '
    )" selection
    
    selected_dir="${dirs[$((selection-1))]}"
    
    echo "You selected '$selected_dir'"
    
    0 讨论(0)
  • 2020-12-28 19:10

    Saw this snippet @ some stack link dunno exactly..though might be useful

     #! /bin/bash
    
    # customize with your own.
    options=(backup_*/)
    
    menu() {
        clear
        echo "Avaliable options:"
        for i in ${!options[@]}; do 
            printf "%3d%s) %s\n" $((i+1)) "${choices[i]:- }" "${options[i]}"
        done
        [[ "$msg" ]] && echo "$msg"; :
    }
    
    prompt="Check an option (again to uncheck, ENTER when done): "
    while menu && read -rp "$prompt" num && [[ "$num" ]]; do
        [[ "$num" != *[![:digit:]]* ]] && (( num > 0 && num <= ${#options[@]} )) || {
            msg="Invalid option: $num"; continue
        }
        ((num--)); msg="${options[num]} was ${choices[num]:+un}checked"
        [[ "${choices[num]}" ]] && choices[num]="" || choices[num]="[+]"
    done
    
    printf "You selected"; msg=" nothing"
    for i in ${!options[@]}; do 
        [[ "${choices[i]}" ]] && { printf " %s" "${options[i]}"; msg=""; }
    done
    echo "$msg"
    
    0 讨论(0)
提交回复
热议问题