Как создать меню для имен и значений переменных среды, начинающихся с $zv?
Вот Это Да! Я просматривал похожие вопросы в течение 2 часов + здесь! Я уверен, что просто хочу довольно простую вещь.
В bash-сессии со многими функциями у нас есть десятки каталогов для посещения. Их имена хранятся в переменных, начиная с $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
Это использует Баш select
встроенный, чтобы обеспечить простые диалоги на основе меню.
arr=()
инициализирует массивwhile ...
читает входные данные и заполняет массив.arr+=( "..." )
добавляет новые записи в массив.printf "%s=%s" "$v" "${!v}"
... печатает имя переменной и ее содержимое.
compgen -v zv
генерирует список всех переменных, которые будут заполнены при наборе$zv<tab><tab>
,- Этот список дан
select
создать меню.cd "${i#*=}"
этотcd
s в каталог, указанный в переменной после первого появления=
,