Posso cambiare la modalità di visualizzazione delle opzioni selezionate?


8

Sto lavorando con select e case in bash. Al momento ho nove opzioni, il che rende una griglia di opzioni 3x3 piacevole, ordinata, ma viene visualizzata in questo modo:

    1) show all elements  4) write to file      7) clear elements
    2) add elements       5) generate lines     8) choose file
    3) load file          6) clear file         9) exit

Preferirei se visualizzato in righe prima delle colonne:

1) show all elements  2) add elements    3) load file
4) write to file      5) generate lines  6) clear file  
7) clear elements     8) choose file     9) exit

C'è un modo per raggiungere questo obiettivo? Preferibilmente qualcosa di facile da impostare e disinserire all'interno di uno script, come un'opzione shell. Se è importante, le opzioni sono memorizzate in un array e referenziate nei case case dall'indice dell'array.

OPTIONS=("show all elements" "add elements" "load file" "write to file" "generate lines" "clear file" "clear elements" "choose file" "exit")

...

select opt in "${OPTIONS[@]}"
do
case $opt in
    "${OPTIONS[0]}")

...

    "${OPTIONS[8]}")
        echo "Bye bye!"
        exit 0
        break
        ;;

    *)
        echo "Please enter a valid option."
esac
done

Risposte:


7

Crea il tuo "seleziona":

#!/bin/bash

options=("show all elements" "add elements" "load file" "write to file" "generate lines" "clear file" "clear elements" "choose file" "exit")
width=25
cols=3

for ((i=0;i<${#options[@]};i++)); do 
  string="$(($i+1))) ${options[$i]}"
  printf "%s" "$string"
  printf "%$(($width-${#string}))s" " "
  [[ $(((i+1)%$cols)) -eq 0 ]] && echo
done

while true; do
  echo
  read -p '#? ' opt
  case $opt in
    1)
      echo "${options[$opt-1]}"
      ;;

    2)
      echo "${options[$opt-1]}"
      ;;

    9)
      echo "Bye bye!"
      break
      ;;
  esac
done

Produzione:

1) mostra tutti gli elementi 2) aggiungi elementi 3) carica il file             
4) scrivere nel file 5) generare righe 6) cancellare il file            
7) cancella gli elementi 8) scegli il file 9) esci                  
#? 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.