Вы можете просто заменить синтаксис {}
, который вы пытаетесь использовать, на cat
, поскольку вы пытаетесь читать из stdin
:
git ls-remote $1 'refs/heads/*' \
| rev \
| cut -d'/' -f1 \
| rev \
| if [ -z $2 ]
then
cat
else
cat > $2
fi
Обновить : подоболочка не нужна, спасибо @tripleee.
Как правило, когда я получаю ошибку такого типа (несоответствие if / else, do, while и т. Д.) И я не могу найти код нарушения, Я делаю резервную копию сценария и начинаю удалять фрагменты кода между любыми блоками, пока у меня не будет только скелет управляющих структур, который обычно помогает мне найти отсутствующее ключевое слово.
Ваш синтаксис неверен. У вас могут быть и другие проблемы с кодом, но это сообщение, скорее всего, вызвано тем, что вы не можете использовать ключевое слово do
как блок; вам необходимо иметь одно из условий цикла.
В настоящее время у вас есть:
*)
do
test -n '$folder' && echo You chose: $REPLY\) $folder && break;
echo 'Wrong entry, try again.';
continue;
done;
;;
Вам не хватает ключевого слова for
, while
или until
для начала цикла.