Next: , Previous: , Up: Dired   [Contents][Index]


30.8 Diredでのシェルコマンド

Diredコマンド! (dired-do-shell-command)は、ミニバッファーでシェルのコマンド文字列を読み取り、そのシェルコマンドを1つ以上のファイルにたいして実行します。シェルコマンドが処理するファイルは、Diredコマンドが操作するファイルを決定する方法と同じです(Operating on Filesを参照してください)。コマンドXは、!の別名です。

コマンド& (dired-do-async-shell-command)は同じことを行ないますが、これはシェルコマンドを非同期で実行する点が異なります(!でシェルコマンドの最後に文字‘&’を追加しても、同じことを行なうことができます)。コマンドが複数のファイルを処理する場合、ファイルごとに指定したシェルコマンドの複数コピーを並行で実行します。例外として、指定されたシェルコマンドが‘;’または‘;&’で終わる場合、バックグラウンドで実行されるシェルコマンドは、各ファイルにたいして順番に実行されます。Emacsは次のコマンドを実行する前に、呼び出したシェルコマンドが終了するのを待ちます。

!&のどちらも、シェルコマンドの作業ディレクトリーは、Diredバッファーのトップレベルのディレクトリーです。

!または&に複数ファイルを処理させる場合、シェルコマンド文字列は、シェルコマンドにそれらのファイルを渡す方法を決定します。

もっと複雑な方法でファイル名を繰り返すには、明示的なシェルループを使用したいと思うかもしれません。たとえば以下は、各ファイルをuuencodeして、入力ファイル名に‘.uu’を追加して出力ファイル名を作成する例です:

for file in * ; do uuencode "$file" "$file" >"$file".uu; done

以下は、‘`?`’表記による同じ例です:

uuencode ? ? > `?`.uu

コマンド!および&は、新しいファイル、または変更されたファイルを表示するために、Diredバッファーを更新しようとはしません。なぜならこれらのコマンドは、どのファイルが変更されたかを知らないからです。Diredバッファーを更新するには、gを使用します(Dired Updatingを参照してください)。

Diredの外でシェルコマンドを実行する情報に関しては、Single Shellを参照してください。