Як створити меню для імен та значень змінних оточуючих, починаючи з $ zv?


1

Оце Так! Я переглядав подібні питання вже 2 години + тут! Я впевнений, що просто хочу зовсім просту річ.

На баш-сесії з багатьма функціями у нас є десятки каталогів, які потрібно відвідати. Їх імена містяться в змінних, починаючи з $zv. Ми використовуємо змінні, оскільки справжні імена дуже довгі.

Деякі прості і запам’ятовуються, як $zvv. Але також $zvdirectionможуть з’явитися такі речі . І головне, що список доступних змінних змінюється. Користувач ніколи не знає, які $zv...варіанти будуть доступні. Деякі з них будуть абсолютно новими, автоматично створеними.

Тому вона зазвичай робить це:

cd $zv <tab> <tab>

Ніякої важкої роботи там немає. Вона отримує список і вручну заповнює свій cd $zvрядок. Але цим користувачам потрібно використовувати ці грі швидко, постійно, часто з новими $zv...змінними, що генеруються прихованими сценаріями.

Тому. Те, що я намагався протягом 2+ годин, - це функція, скажімо zv, яка покаже їм усі доступні в даний час $zv...автозаповнення, а потім, сподіваємось, також надасть їх у відповідь cd $zvпідказки, де bash чекає, коли вони додадуть символи, що залишилися.

Я так впевнений, що ця функція повинна бути одним вкладишем, але я застряг!

Відповіді:


1

Використовуй це:

arr=()
while read v; do arr+=( "$(printf "%s=%s" "$v" "${!v}")" ); done < <(compgen -v zv)
select i in "${arr[@]}"; do cd "${i#*=}"; break; done

Для цього використовуються bashs selectвбудовані для надання простих діалогів на основі меню.


  • arr=() ініціалізує масив
  • while ... зчитує вхід і заповнює масив.
    • arr+=( "..." ) додає нові записи до масиву.
    • printf "%s=%s" "$v" "${!v}" ... друкує назву змінної та її вміст.
  • compgen -v zvгенерує список усіх змінних, які були б завершені під час введення тексту $zv<tab><tab>.
  • Цей список надається selectдля створення меню.
    • cd "${i#*=}"це cdв каталог, вказаний у змінній після першого виникнення =.

Дякую! Частина "compgen -v zv" - це саме те, на що я сподівався, а меню вибору - чудова додаткова. Я цим скористаюся. Ваша відповідь виходить за рамки обов'язку, молодець.
користувач251764
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.