Как экранировать числа между идентификаторами групп

Первая и очевидная проблема заключается в следующем:

if [ -z "EXISTS" ]; then

Это будет всегда истинным, так как вы проверяете, пуста ли строка EXISTS. Поскольку это строка, она никогда не будет пустой. Вместо этого вы хотите сделать это:

if [ -z "$EXISTS" ]; then

Кроме того, использование lsдля подобных вещей является плохой практикой, а также использование ЗАГЛАВНЫХ БУКВ для имен переменных сценария. Используйте только заглавные буквы для переменных среды, чтобы вы могли быть уверены, что имена не будут перекрываться.

Следующая важная проблема заключается в том, что вы звоните ./$0. $0— это bash, поэтому ./$0— это ./bash, которого не существует. Предположительно, вы хотите пере-прочитать .bashrc.

Тогда, конечно, ваша sedкоманда (даже после исправления синтаксической ошибки )всегда будет совпадать сама с собой. Вам нужно убедиться, что вы пропускаете строку с фактической командой sed, например, сопоставляя только в начале строки (также обратите внимание на исправления):

sed -i "/^export BRANCH=/{s/export BRANCH=.*$/export BRANCH="$1\"/}" ~/.bashrc

Но можно упростить до:

sed -i "s/^export BRANCH=.*$/export BRANCH="$1\"/" ~/.bashrc

Собрав это вместе, вы, вероятно, захотите что-то вроде:

switch() {
  shopt -s nullglob
  exists=(~/br/*"$1")
  if [ -z "$exists" ]; then
    ## Are you sure you want the * there? That will expand to all
    ## files and directories beginning with $1
    BR="$1*"
    export PS1="...."
  else
    # Find "export BRANCH"a"
    sed -i "s/export BRANCH=.*$/export BRANCH=\"$1\"/" ~/.bashrc
   . ~/.bashrc
    fi
}
2
02.04.2021, 16:05
0 ответов

Теги

Похожие вопросы