BASH: использовать пользовательскую переменную для обновления PATH - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь написать простой bash скрипт, который проверяет вывод команды: whereis ls сохраняет соответствующий каталог в переменной, в этом случае:

myvar=$(whereis ls | awk '{sub(/\/ls$/, "", $2); print $2}')
echo $myvar
$ /bin

Теперь с помощью myvar мне нужно удалить этот каталог из PATH и обновить PATH, чтобы отразить это изменение. Как я могу наиболее эффективно выполнить sh эту задачу?

1 Ответ

1 голос
/ 02 февраля 2020

Вы можете использовать замену шаблона ${parameter/pattern/string} для обновления PATH:

PATH=${PATH/#$myvar:/:}
PATH=${PATH/%$myvar/:}
PATH=${PATH/:$myvar:/:}

Например:

$ echo $PATH
/bin:xxx:/bin:yyy:/usr/sbin:zzz:/bin

$ echo $myvar
/bin

PATH=${PATH/#$myvar:/:}   # remove $myvar at the beginning of $PATH
PATH=${PATH/%$myvar/:}    # remove $myvar at the end of $PATH
PATH=${PATH/:$myvar:/:}   # remove $myvar anywhere else in $PATH

$ echo $PATH
:xxx:yyy:/usr/sbin:zzz::

В качестве альтернативы вы можете использовать sed:

$ echo $PATH
/bin:xxx:/bin:yyy:/usr/sbin:zzz:/bin
$ PATH=$(sed -E "s@(:|^)$myvar(:|$)@:@g" <<< $PATH)
$ echo $PATH
:xxx:yyy:/usr/sbin:zzz:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...