1

目標は、1行(コピーアンドペースト)のbashコマンドを作成することです。bash one lineコマンドは、ドライブをパーティション分割してフォーマットする必要があります。その結果、マウント可能なボリュームが生成された場合、いくつかの初期メンテナンスコマンドが実行されます。

cd /Volumes/VolumeName目標は、現在のシェルコンテキストで成功したときに、コマンドのリストを実行することです。このコマンドのグループ化は、中括弧を使用してbashで実行できます。失敗したcd /Volumes/VolumeName場合(echo $?!= 0)、それ以上のコマンド実行は不要であり、コマンド実行を停止できます。

コマンドの結果は次のcd /Volumes/$VOL && {sudo rm -fr .{,_.}{fseventsd,Spotlight-V100,Trashes}; mkdir .fseventsd;}とおりです。

-bash: syntax error near unexpected token `}'

ボトルネックは、中括弧で囲まれたコマンドリストのコマンドの1つが、リストの生成に中括弧を使用していることである可能性があります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 は、現在のシェル環境で単純に実行されます。リストは改行またはセミコロンで終了する必要があります。これは、グループ コマンドと呼ばれます。戻りステータスはリストの終了ステータスです。メタ文字 ( および ) とは異なり、{ および } は予約語であり、予約語の認識が許可されている場所で使用する必要があることに注意してください。 それらは単語の区切りを引き起こさないため、リストから空白で区切る必要があります

于 2012-08-13T12:05:14.560 に答える
0

グループ化のコマンドに使用される中かっこの前後にスペースを追加します。{ sudo ...代わりに{sudo ...

于 2012-08-13T12:06:55.087 に答える
0

ネストされたブレースに問題がある可能性があります。これを試してください:

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

サブシェルを使用する場合は、「{}」の代わりに「()」を使用するのが正しい方法です。「()」を使用すると、コマンドの先頭に余分なスペースを追加する必要はありません。

于 2012-08-13T11:59:39.217 に答える