Как расширить команду в bash, чтобы она расширялась в зависимости от параметров?

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

git checkout -b newBranch 

за ней должна следовать команда

 git update-index --assume-unchanged LARGE_READONLY_DIRECTORY 

Я подумал, что это будет отличная возможность попробовать свои неопытные навыки bash, так что все, что мне нужно сделать в оболочке, – это первая строка, и она выполнит это, а затем вторую, без меня, чтобы я это сделал (что я выиграл «т).

Я понял, что хочу сделать, это функция в моем .bashrc, которая проверяет, является ли первый аргумент «checkout», а второй – «-b». Эта первая проверка проста, но я не могу понять, как отметить наличие -b.

 git() { if [[ $1 == 'checkout' ]] && [[$2 == '-b']]; then echo 'yep!'; fi; command git "$@"; } 

Когда я выполняю это, он жалуется, что [[-b: command not found . По-видимому, здесь важно, что это вариант, а не аргумент. Может ли кто-нибудь сказать мне, как проверить наличие этого аргумента, так что я знаю, чтобы выполнить последующую команду?

2 Solutions collect form web for “Как расширить команду в bash, чтобы она расширялась в зависимости от параметров?”

Вам нужно пространство между [[ и $2 .

Для bash [[ не является синтаксисом, это встроенная команда (или ключевое слово, чтобы быть точным). Bash выполнит [[ со всеми его параметрами, включая закрытие ]] . Когда у вас нет пробела между [[ и $2 bash не увидит ключевое слово [[ , вместо этого он увидит эту вещь: [[-b (после расширения от $2 до -b ). Затем Bash попытается выполнить строку [[-b как команду и сбой. См. help [[ для получения дополнительной информации.

По той же причине вам также нужно пространство перед закрытием ]] .

Вот ваш код исправлен:

 git() { if [[ $1 == 'checkout' ]] && [[ $2 == '-b' ]]; then echo 'yep!'; fi; command git "$@"; } 

См. Также ловушки bash и FAQ по bash . IMO – лучший способ узнать bash scripting … или лучший способ научиться не делать слишком много сценариев bash.

Поскольку у вас нет пробела между [[ и $2 , он анализируется неправильно (как [[ сразу следует расширение $2 ). Вам нужно пробел между аргументами [[ :

 [[ $2 == -b ]] 
  • Сортировка файла на основе средней части
  • Ввод каталогов, где имена совпадают в подстроке
  • сохранить буфер ожидания за пределами области видимости?
  • Как написать скрипт для выполнения файлов в нескольких каталогах
  • выбор конкретной строки в поле
  • Как мне спросить пароль по приглашению GUI при использовании sudo в скрипте?
  • .bashrc не экспортирует путь?
  • Эхо-вывод результатов в неустойчивом порядке в BASH
  • Что такое curl-эквивалент этой команды wget?
  • Сценарий оболочки для ssh на сервер Unix / Linux из MacOS X 10.10
  • Проблема с переменной чтения от AWK
  • Linux и Unix - лучшая ОС в мире.