Каков правильный способ расширения этих строк bash в правильные команды Git?

Я собираюсь писать некоторые базовые сценарии bash, и расширение этих строк в команды Git оказывается проблематичным.

Идея заключается в том, чтобы передать сценарию каталог верхнего уровня, чьи подкаталоги содержат репозитории Git и выполняют ту же самую команду в подкаталогах с возможностью tee вывода в файл.

Проблема в том, что команды git, которые имеют дополнительные опции, работают некорректно. Поэтому работают команды diff и status . remote работы, но remote show origin не работает. Например, параметры r и e не работают.

 processing /home/vfclists/project1/ git: 'remote -v' is not a git command. See 'git --help'. processing /home/vfclists/project1/ git: 'remote show origin' is not a git command. See 'git --help'. 

Проблема возникает из расширения bash или от самого Git или того и другого?

 #!/bin/bash usage() { cat << EOF checkrepos command output file usage: $0 options OPTIONS: commands r remote show origin d diff s status e remote other options -d directory -t filename for tee EOF } WD=$(pwd) echo "working directory $WD" while getopts "c:t:v:h:" OPTION do case $OPTION in c) case $OPTARG in r) COMMAND="remote show origin" ;; d) COMMAND="diff" ;; s) COMMAND="status" ;; e) COMMAND="remote -v" ;; esac ;; t) OUTPUTFILE=$OPTARG ;; v) VERBOSE=1 ;; h) usage exit 1 ;; ?) usage exit ;; esac done if [[ -z $COMMAND ]] then echo 'command is required' usage exit 1 fi for d in $WD/* ; do echo "" echo "====================" echo "" echo "processing $d" git -C "$d" "$COMMAND" echo "" echo "====================" echo "" done 

  • Автоматически копировать PDF.plugin в Chromium.app
  • Закрепление скрипта немного больше
  • Предотвращение завершения работы с использованием сценария оболочки при завершении работы
  • Создайте файл журнала с тем же именем, что и входной файл
  • Сценарий Bash для извлечения некоторой информации из HTML-страниц Ebay
  • Перенаправление stdout игнорирует строки без символа перевода строки
  • Сценарий оболочки для выполнения сценария оболочки для всех подкаталогов
  • Фильтрация или обтекание определенных разделов файла
  • 2 Solutions collect form web for “Каков правильный способ расширения этих строк bash в правильные команды Git?”

    В качестве примера r случай r

     COMMAND="remote show origin" 

    с последующим

     git -C "$d" "$COMMAND" 

    git видит три аргумента, -C , значение d и remote show origin , а не пять, которые он ожидает ( remote , show и origin отдельно, а не remote show origin ).

    С помощью bash простое удаление цитат исправит это:

     git -C "$d" $COMMAND 

    С Zsh вам нужно разбить строку, используя

     git -C "$d" $=COMMAND 

    (спасибо ilkkachu и Жиль !).

    Вы используете переменную COMMAND для хранения списка строк, но это строковая переменная, а не переменная списка. Инструкция git -C "$d" "$COMMAND" расширяется до четырех слов: git , -C , значение переменной d и значение переменной COMMAND . Если значение COMMAND , например, remote -v то третий аргумент в командной строке git является remote -v , который git не понимает.

    Чтобы передать отдельные аргументы, сохраните их в списке строк, т. Е. Массиве . «Массив» в программировании оболочки означает список строк.

     COMMAND=() … e) COMMAND=(remote -v);; … if ((${#COMMAND[@]} == 0)); then echo >&2 "Missing command" usage >&2 exit 2 fi … git -d "$d" "${COMMAND[@]}" 
    Interesting Posts

    Существуют ли какие-либо решения для виртуализации OpenBSD, которые не являются портами?

    1 FastCGI, отправленный в stderr: «Сообщение PHP: PHP Неустранимая ошибка: session_start (): Не удалось инициализировать модуль памяти:

    Проблемы с установкой DEbian 8.2 (Jessie) на компьютере msi (во время сетевой установки)

    Как перенаправить весь трафик wlan0 на eth0 в Ubuntu?

    Как передать переменную оболочки в шаблон поиска awk?

    ВСЕ = (ВСЕ) ВСЕ – все ли третье ВСЕ дает им доступ?

    Распаковка с помощью tar: – слишком жадничать: как исключить только файл на уровне корневого уровня?

    Как копировать «только файлы» рекурсивно

    Переустановите программу `env`

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

    Пожалуйста, объясните этот вывод команды ps -ef?

    Как получить второй для последнего параметра предыдущей команды в bash?

    Как запустить SPSS-статистику 23 в Debian?

    Установка XV на windows с использованием cygwin

    Вращающиеся журналы, созданные из tcpdump с logrotate

    Linux и Unix - лучшая ОС в мире.