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

时间:2012-08-13 11:54:44

标签: bash

目标是创建一行(复制和粘贴)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}

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

3 个答案:

答案 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 ...