Как написать псевдоним bash, чтобы вывести список всех соответствующих имен env-vars - PullRequest
1 голос
/ 04 августа 2011

Привет дружелюбные ребята. В Linux с Bash мне часто приходится перечислять переменные окружения (env-var), имена которых начинаются с некоторого предопределенного слова. Например, чтобы вывести список всех env-переменных с именем pattern gmXXX, я сделаю

[chj @linux-ic37 ~]$ export|grep '^declare -x gm'
declare -x gmu_DO_SHOW_COMPILE_CMD="1"
declare -x gmu_DO_SHOW_LINK_CMD="1"

Но писать эту длинную команду каждый раз скучно. Итак, я могу написать псевдоним, чтобы упростить его? Я пытался, но не повезло.

[chj @linux-ic37 ~]$ alias fvgm="export|grep \'^declare -x gm\'"

[chj @linux-ic37 ~]$ fvgm
grep: gm': No such file or directory

Кто-нибудь может мне помочь?

Чтобы продвинуться дальше, могу ли я пойти так далеко, как параметризованный 'gm', например

fv gm

перечислить все env-var, начинающиеся с 'gm'?

Ответы [ 3 ]

2 голосов
/ 04 августа 2011

Как насчет: fv() { env | grep "^$1"; }

$ fv HO
HOSTNAME=...
HOSTTYPE=...
HOME=...
2 голосов
/ 04 августа 2011

Вам не нужно избегать одинарных кавычек в вашем псевдониме.Измените его на:

alias fvgm="export|grep '^declare -x gm'"

Вам нужно написать функцию, чтобы сделать ее общей.Например:

fv(){
    export | grep "^declare -x $1"
}

Затем вы можете позвонить:

fv gm
1 голос
/ 04 августа 2011

Вы пробовали compgen -v STR

Это создаст список всех имен переменных, начинающихся с STR Это должен быть лучший вариант, чем конвейерный export, потому что он не включает другой процесс

Таким образом, та же функция fv может быть написана как [отредактировано для добавления значений]

fv()
{
   for EV in $(compgen -v ${1}); do 
     eval echo "$EV=\$$EV"
   done
}
...