Используйте подмодуль мерзавца foreach с функцией

Если это не возьмет никого, но параметры файла, то это будет работать также:

command_with_output > ${1:-/dev/stdout}

править: Или еще лучше, так как Вы, вероятно, заботитесь об ошибках также:

command_with_output &> ${1:-/dev/stdout}
10
23.05.2017, 15:39
3 ответа

Я решил свой вопрос путем вставления функции кавычек как обратный вызов:

#!/bin/bash

if [ -z $1 ]; then
    echo "Branch name required."
    exit
fi

git submodule foreach "
    branch=$1;
    exists=\$(git show-ref refs/heads/\$branch | cut -d ' ' -f1);

    if [ -z \$exists ]; then
        branch='master';
    fi;

    echo Checking branch \$branch for submodule \$name.;

    git fetch --all -p;
    git co \$branch;
    git reset --hard origin/\$branch;
"

Отметьте это переменные как $1 те, которые от пространства имен сценария. "Завершенные" как $\(bar), \$branch оценены в рамках "обратного вызова". Это было довольно легко.

5
27.01.2020, 20:01

Функция оболочки только существует в оболочке, где она определяется. Точно так же метод Java только существует в экземпляре программы, где он определяется и так далее. Вы не можете вызвать функцию оболочки из другой программы, даже если та программа, оказывается, другая оболочка, которая выполняется дочерним процессом исходной оболочки.

Вместо того, чтобы определить функцию, сделать pbranch отдельный сценарий. Поместите его в свой ПУТЬ.

#!/bin/sh
branch="$1"
ref="$(git show-ref "refs/heads/$branch")"
if [ -z "$ref" ]; then
    branch="master"
fi
git co "$branch"
git pull origin "$branch"

Shell программируя примечание: всегда помещайте двойные кавычки вокруг подстановок переменных и управляйте заменами: "$foo", "$(foo)", если Вы не знаете, что необходимо пропустить кавычки. Незащищенные замены интерпретируются как разделенные от пробела списки шаблонов шарика, который почти никогда не желаем. Кроме того, не используйте обратные галочки, по подобным причинам, используйте $(…) вместо этого. Здесь, это на самом деле не имеет значения, потому что имена ответвления мерзавца не содержат специальные символы, и потому что [ -z $branch ] анализируется как [ -z ] который также верен когда branch пусто. Но не вырабатывайте привычку исключения кавычек, оно возвратится и укусит Вас.

Скажем, сценарий называют pbranch-submodule, можно затем работать

git submodule foreach pbranch-submodule
5
27.01.2020, 20:01
  • 1
    И если Вы называете его git-pbranch-submodule, это может вести себя как встроенная команда мерзавца: git pbranch-submodule или git submodule foreach git pbranch-submodule. (Обратите внимание, что foreach принимает команду оболочки и не команду мерзавца.) –  idbrii 01.08.2014, 16:12

Вы можете использовать функции, но вам нужно сначала экспортировать их:

export -f pbranch

. Кроме того, если вы хотите расширения синтаксиса Bash, вы можете заставить Bash Shell начать:

git submodule foreach bash -c 'pbranch'
7
27.01.2020, 20:01

Теги

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