1

目标是创建一个单行(复制和粘贴)bash 命令。bash 一行命令应该对驱动器进行分区和格式化,当这导致可安装的卷时,一些初始维护命令。

cd /Volumes/VolumeName目标是在当前 shell 上下文中成功时执行命令列表。这组命令可以在 bash 中使用花括号来完成。当cd /Volumes/VolumeName失败(echo $?!= 0)时,不需要进一步的命令执行,命令执行可以停止。

命令的结果cd /Volumes/$VOL && {sudo rm -fr .{,_.}{fseventsd,Spotlight-V100,Trashes}; mkdir .fseventsd;}是:

-bash: syntax error near unexpected token `}'

瓶颈可能是花括号命令列表中的命令之一是使用花括号生成列表:sudo rm -fr .{,_.}{fseventsd,Spotlight-V100,Trashes}.

如何在花括号命令组中嵌套花括号以生成列表?

4

3 回答 3

4

您只是缺少必要的前导空格。考虑:

mini:~ michael$ { echo sudo rm -fr .{,_.}{fseventsd,Spotlight-V100,Trashes}; echo mkdir .fseventsd;}
sudo rm -fr .fseventsd .Spotlight-V100 .Trashes ._.fseventsd ._.Spotlight-V100 ._.Trashes
mkdir .fseventsd
mini:~ michael$ {echo sudo rm -fr .{,_.}{fseventsd,Spotlight-V100,Trashes}; echo mkdir .fseventsd;}
-bash: syntax error near unexpected token `}'

如果您查看man 1 bash复合命令”部分,您会看到以下内容(强调我的):

{ 列表; }

list 只是在当前的 shell 环境中执行。list 必须以换行符或分号结束。这称为组命令。返回状态是列表的退出状态。请注意,与元字符 ( 和 ) 不同,{ 和 } 是保留字,并且必须出现在允许识别保留字的地方。 由于它们不会导致断字,因此必须用空格将它们与列表隔开

于 2012-08-13T12:05:14.560 回答
0

也许问题出在嵌套的大括号上。试试这个:

cd /Volumes/$VOL && (sudo rm -fr .{,_.}{fseventsd,Spotlight-V100,Trashes}; mkdir .fseventsd;)

如果要使用子shell,正确的方法是使用“()”而不是“{}”。使用“()”,您不需要在命令的开头添加额外的空格。

于 2012-08-13T11:59:39.217 回答
0

在用于命令分组的大括号周围添加空格。{ sudo ...而不是{sudo ...

于 2012-08-13T12:06:55.087 回答