git 删除脚本抛出错误:意外标记‘(’附近的语法错误

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 问题,但是当我从 bash 检查 extglob 时,它显示为off

$ shopt extglob
extglob         off

答案1

您正在运行狂欢脚本作为脚本。您还没有展示您的实际脚本,但根据错误,我猜您有一个shshebang:

#!/bin/sh

sh或者你使用以下命令来调用脚本bash

sh yourScript.sh

您使用的运算符是 bash 功能,在shell(Ubuntu 系统上称为基本 shell )<()中不可用。要解决此问题,只需将您的 shebang 行替换为:shdash

#!/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反而。

相关内容