我有下面的一行代码来清理我的本地 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 问题,但是当我从 bash 检查 extglob 时,它显示为off
:
$ shopt extglob
extglob off
答案1
您正在运行狂欢脚本作为什脚本。您还没有展示您的实际脚本,但根据错误,我猜您有一个sh
shebang:
#!/bin/sh
sh
或者你使用以下命令来调用脚本bash
:
sh yourScript.sh
您使用的运算符是 bash 功能,在shell(Ubuntu 系统上称为基本 shell )<()
中不可用。要解决此问题,只需将您的 shebang 行替换为:sh
dash
#!/bin/bash
或者,如果您手动调用脚本,请使用bash
:
bash yourScript.sh
为了显示:
$ cat script.sh
wc < <(echo foo)
现在,如果我用 bash 运行它:
$ 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反而。