目标是创建一行(复制和粘贴)bash命令。 bash one line命令应该对驱动器进行分区和格式化,当这导致可安装的卷时,会出现一些初始维护命令。
目标是在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}
。
如何在花括号命令组内嵌套花括号以生成列表?
答案 0 :(得分: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环境中执行。列表必须以换行符或分号结尾。这称为组命令。返回状态是列表的退出状态。请注意,与元字符(和)不同, {和}是保留字,必须出现在允许识别保留字的位置。 由于它们不会导致分词,因此必须通过空格将它们与列表分开。
答案 1 :(得分:0)
问题可能在于嵌套大括号。试试这个:
cd /Volumes/$VOL && (sudo rm -fr .{,_.}{fseventsd,Spotlight-V100,Trashes}; mkdir .fseventsd;)
如果你想使用子shell,那么严格的方法是使用“()”而不是“{}”。 使用“()”,您不需要在命令的开头添加额外的空格。
答案 2 :(得分:0)
在用于命令分组的大括号周围添加空格。 { sudo ...
代替{sudo ...