У меня есть нижняя строка, которую я использую для очистки моего локального репозитория 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
Вы запускаете скрипт удара как 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 вместо этого.