Ошибка создания сценария удаления git: синтаксическая ошибка рядом с неожиданным токеном `('

У меня есть нижняя строка, которую я использую для очистки моего локального репозитория Git.

git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -D

Я знаю о его опасностях, но я хотел вставить его в скрипт bash, однако, когда я запускаю его, я получаю:

git_cleanup.sh: line 2: syntax error near unexpected token `('
git_cleanup.sh: line 2: `git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -D'

Я подумал, что это может быть проблема с extglob но когда я проверяю extglob из bash, он показывает его как off:

$ shopt extglob
extglob         off
1
задан 9 July 2019 в 19:36

1 ответ

Вы запускаете скрипт удара как sh сценарий. Вы не показали свой фактический сценарий, но на основе ошибки, я предполагаю Вас, любой имеет sh хижина:

#!/bin/sh

Или Вы называете сценарий с sh вместо bash:

sh yourScript.sh

<() оператор, который Вы используете, является функцией удара и не доступен в sh оболочка (который является основной названной оболочкой dash в системах Ubuntu). Для фиксации этого просто замените строку хижины:

#!/bin/bash

Или при вызове сценария вручную использовать bash:

bash yourScript.sh

Проиллюстрировать:

$ cat script.sh
wc < <(echo foo)

Теперь, если я выполняю это с ударом:

$ bash ./script.sh 
      1       1       4

Но с sh:

$ sh ./script.sh 
./script.sh: line 1: syntax error near unexpected token `<'
./script.sh: line 1: `wc < <(echo foo)'

На самом деле ошибка, которую Вы получаете, не что dash распечатал бы, таким образом, я предполагаю, что Вы на самом деле не выполняете это в системе Ubuntu. В этом случае это не имеет никакого значения, так как тот же важный вопрос произошел бы на Ubuntu также, но в следующий раз, спросите относительно http://linux.stackexchange.com вместо этого.

1
ответ дан 7 December 2019 в 15:00

Другие вопросы по тегам:

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