Если это не возьмет никого, но параметры файла, то это будет работать также:
command_with_output > ${1:-/dev/stdout}
править: Или еще лучше, так как Вы, вероятно, заботитесь об ошибках также:
command_with_output &> ${1:-/dev/stdout}
Я решил свой вопрос путем вставления функции кавычек как обратный вызов:
#!/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
оценены в рамках "обратного вызова". Это было довольно легко.
Функция оболочки только существует в оболочке, где она определяется. Точно так же метод 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
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'