これが機能する理由:
mkdir /dir/test{1,2,3}
そうではありませんか?
{chown httpd,chmod 700} /dir/test1
-bash: {chown: command not found
私のBashバージョンは次のとおりです。GNU bash、バージョン4.2.46(2) - リリース
答え1
中かっこ拡張が無効です。支柱の拡張は次のとおりです。言葉シェルに。
単語は引用符なしの空白(デフォルトではタブまたは改行)で区切られた文字列です。文字列は3つの別々の単語で構成され、中括弧{chown httpd,chmod 700}
拡張{chmod
として認識されません。http,chmod
700}
代わりに、シェルは行を{chown
コマンドとして解釈し、引数とともに実行しますhttp,chmod
。700}
/dir/test1
これをテストする最も簡単な方法は次のとおりですecho
。
$ echo {chown httpd,chmod 700} /dir/test1
{chown httpd,chmod 700} /dir/test1
$ echo {"chown httpd","chmod 700"} /dir/test1
chown httpd chmod 700 /dir/test1
中括弧拡張が機能しても、このコマンドは意味がありません。
2つのコマンドを書くだけです。
chown http /dir/test1
chmod 700 /dir/test1
答え2
マニュアルページで述べたように、bashは各単語に対して中括弧拡張を実行するためです。後ろにコマンドラインを単語に分割します。
{chown
したがって、コマンドラインは最初に、およびhttpd,chmod
に分割されます。700}
その後、{chown
有効な中括弧拡張モードではないため、そのまま残り、bashはその名前でコマンドを実行しようとします。
マンページの引用は次のとおりです。
拡張はコマンドラインから行われます。単語で割った後。中括弧拡張、チルダ拡張、パラメータおよび変数拡張、コマンド置換、算術拡張、トークン化、パス名拡張など、7 種類の拡張が実行されます。
zsh
他のシェル(算術拡張の後に中括弧拡張が続き、追加の単語の分離はまったく行われません)とは異なり、順序に注意してください。
以下は、または1 2
で印刷されます。zsh
ksh
x y
bash
f=; f1=x; f2=y; echo $f{1,2}
答え3
他の回答では、支柱の拡張が機能しない理由をすでに説明しました。今はこの問題を無視し、ファイル名が重複するのを避けたいかもしれません。ファイル名を変数に割り当てるか、$_
特殊変数(前のコマンドの最後のシェル語を含む)を使用してください。
f="some long and ugly filename"
chown httpd "$f"
chmod 700 "$f"
または
chown httpd "some long and ugly filename"
chmod 700 "$_"