exec - サブプロセスを呼び出す
シノプシス
exec? スイッチ ? arg ? arg … ?
説明
このコマンドは、引数を、実行する1つ以上のサブプロセスの指定として扱います。引数は、標準のシェルパイプラインの形式をとります。 arg コマンドの1ワードになり、それぞれ異なるコマンドがサブプロセスになります。
最初の引数がexec 皮切りに- それらはコマンドラインスイッチとして扱われ、パイプライン仕様の一部ではありません。現在サポートされているスイッチは次のとおりです。
-keepnewline
パイプラインの出力に後続の改行を保持します。通常、末尾の改行は削除されます。
--
スイッチの終了をマークします。この後の議論は最初のものとして扱われます arg それが-.
もし arg (または arg 's)は以下に記述された形式の1つを持っています。exec サブプロセス間の入出力の流れを制御する。そのような引数はサブプロセスに渡されません。 `` < ファイル名 '' ファイル名 は、 `` <''とは別個の引数でも、間に空白を入れない同じ引数(つまり `` < ファイル名 '').
|
パイプライン内の異なるコマンドを区切ります。前述のコマンドの標準出力は、次のコマンドの標準入力にパイプされます。
|&
パイプライン内の異なるコマンドを区切ります。前述のコマンドの標準出力と標準エラーの両方が、次のコマンドの標準入力にパイプされます。この形式のリダイレクションは、2>や>&などのフォームをオーバーライドします。
< ファイル名
次の名前のファイル ファイル名 パイプライン内の最初のコマンドの標準入力として使用されます。
<@ fileId
FileId 前の呼び出しからの戻り値など、開いているファイルの識別子でなければなりません開いた。これは、パイプラインの最初のコマンドの標準入力として使用されます。 FileId 読書のために開かれていなければならない。
<< 値
値 標準入力として最初のコマンドに渡されます。
> ファイル名
最後のコマンドの標準出力は、指定されたファイルにリダイレクトされます。 ファイル名 以前の内容を上書きします。
2> ファイル名
パイプライン内のすべてのコマンドの標準エラーは、指定されたファイルにリダイレクトされます ファイル名 以前の内容を上書きします。
>& ファイル名
最後のコマンドの標準出力とすべてのコマンドの標準エラーの両方が、指定されたファイルにリダイレクトされます ファイル名 以前の内容を上書きします。
>> ファイル名
最後のコマンドの標準出力は、指定されたファイルにリダイレクトされます。 ファイル名 それを上書きするのではなく、追加します。
2>> ファイル名
パイプライン内のすべてのコマンドの標準エラーは、指定されたファイルにリダイレクトされます ファイル名 それを上書きするのではなく、追加します。
>>& ファイル名
最後のコマンドの標準出力とすべてのコマンドの標準エラーの両方が、指定されたファイルにリダイレクトされます ファイル名 それを上書きするのではなく、追加します。
>@ fileId
FileId 前の呼び出しからの戻り値など、開いているファイルの識別子でなければなりません開いた。最後のコマンドの標準出力は次のようにリダイレクトされます。 fileId そのファイルは書き込み用に開かれている必要があります。
2>@ fileId
FileId 前の呼び出しからの戻り値など、開いているファイルの識別子でなければなりません開いた。パイプライン内のすべてのコマンドの標準エラーは、次のようにリダイレクトされます。 fileId のファイル。ファイルは書き込み用に開かれている必要があります。
>&@ fileId
FileId 前の呼び出しからの戻り値など、開いているファイルの識別子でなければなりません開いた。最後のコマンドの標準出力とすべてのコマンドの標準エラーの両方が、次のようにリダイレクトされます。 fileId のファイル。ファイルは書き込み用に開かれている必要があります。
標準出力がリダイレクトされていない場合、exec コマンドは、パイプラインの最後のコマンドからの標準出力を返します。パイプライン内のコマンドのいずれかが異常終了したり、強制終了または中断したりすると、exec エラーを返し、エラーメッセージにはパイプラインの出力が続き、異常終了を示すエラーメッセージが続きます。そのエラーコード 変数には最後に発生した異常終了に関する追加情報が含まれます。いずれかのコマンドが標準エラーファイルに書き込みを行い、その標準エラーがリダイレクトされない場合、exec エラーを返します。エラーメッセージには、パイプラインの標準出力、異常終了に関するメッセージ(存在する場合)、続いて標準エラー出力が続きます。
結果またはエラーメッセージの最後の文字が改行である場合、その文字は通常は結果またはエラーメッセージから削除されます。これは、通常は改行で終わらない他のTcl戻り値と一致します。ただし、-keepnewline が指定されている場合、末尾の改行は保持されます。
標準入力が `` <」または `` << "または` `@ ''でリダイレクトされない場合、パイプラインの最初のコマンドの標準入力はアプリケーションの現在の標準入力から取得されます。
最後の arg ``& ''であれば、パイプラインはバックグラウンドで実行されます。この場合、execコマンドは、要素がパイプライン内のすべてのサブプロセスのプロセス識別子であるリストを返します。パイプラインの最後のコマンドの標準出力は、リダイレクトされていなければアプリケーションの標準出力に送られ、リダイレクトされない限り、パイプラインのすべてのコマンドからのエラー出力はアプリケーションの標準エラーファイルに送られます。
各コマンドの最初の単語がコマンド名として使用されます。チルダ置換が実行され、結果にスラッシュが含まれていない場合は、PATH環境変数のディレクトリで指定された名前で実行可能ファイルが検索されます。名前にスラッシュが含まれている場合は、現在のディレクトリから到達可能な実行可能ファイルを参照する必要があります。 `` glob ''拡張や他のシェルのような置換は、コマンドの引数に対して実行されません。
移植性の問題
Windows (すべてのバージョン)
ソケットを読み書きする、 ``@ fileId ''記法は動作しません。ソケットから読み取ると、16ビットDOSアプリケーションがハングアップし、32ビットアプリケーションがファイルの終わりですぐに戻ります。いずれかのタイプのアプリケーションがソケットに書き込むと、その情報は代わりにコンソールに送信されます(存在する場合)、または破棄されます。
Tkコンソールのテキストウィジェットは、実際の標準IO機能を提供していません。 Tkでは、標準入力からリダイレクトすると、すべてのアプリケーションに直ちにEOFが表示されます。標準出力または標準エラーにリダイレクトされた情報は破棄されます。
前方スラッシュまたはバックスラッシュのいずれかは、Tclコマンドへの引数のパス区切りとして受け入れられます。アプリケーションを実行するとき、アプリケーションに指定されたパス名には、パス区切り文字としてフォワードスラッシュまたはバックスラッシュを含めることもできます。しかし、ほとんどのWindowsアプリケーションでは、スラッシュを引数として受け入れるのはオプションの区切り文字とバックスラッシュのみです。フォワードスラッシュでパス名を指定するアプリケーションの引数は、バックスラッシュ文字を使用するように自動的には変換されません。引数にパス区切り文字としてスラッシュが含まれている場合は、プログラムに応じてパス名として認識される場合と認識されない場合があります。
さらに、16ビットのDOSまたはWindows 3.Xアプリケーションを呼び出すときは、すべてのパス名は、短い、隠れた、パス形式を使用する必要があります(たとえば、 `` applbakery.default ''の代わりに `` applba〜1.def '' )。
パス内の行の2つ以上のフォワードスラッシュまたはバックスラッシュは、ネットワークパスを参照します。たとえば、ルートディレクトリの単純な連結c:/ サブディレクトリ/ windows / system 収穫するc:// windows / system (2つのスラッシュは一緒に)、マウントポイントを参照します。システム 呼び出されたマシンで窓 (そしてそのc:/ 無視されます)。c:/ windows / system現在のコンピュータのディレクトリを示します。ザファイル結合 コマンドを使用してパスコンポーネントを連結する必要があります。
Windows NT
アプリケーションを実行しようとすると、exec 最初に指定された名前の名前を検索します。次に、.com, 。EXE、および。コウモリ 指定された名前の末尾に追加され、より長い名前が検索されます。ディレクトリ名がアプリケーション名の一部として指定されていない場合は、アプリケーションの検索時に次のディレクトリが自動的に検索されます。
Tcl実行可能ファイルがロードされたディレクトリ。現在のディレクトリ。Windows NTの32ビットシステムディレクトリ。Windows NTの16ビットシステムディレクトリ。Windows NTホームディレクトリ。パスにリストされているディレクトリ。 シェルの組み込みコマンドを実行するために指 そしてコピー呼び出し元は、 ``cmd.exe / c''を目的のコマンドに追加します。 Windows 95 アプリケーションを実行しようとすると、exec 最初に指定された名前の名前を検索します。次に、.com, 。EXE、および。コウモリ 指定された名前の末尾に追加され、より長い名前が検索されます。ディレクトリ名がアプリケーション名の一部として指定されていない場合は、アプリケーションの検索時に次のディレクトリが自動的に検索されます。 Tcl実行可能ファイルがロードされたディレクトリ。現在のディレクトリ。Windows 95のシステムディレクトリ。Windows 95のホームディレクトリ。パスにリストされているディレクトリ。 シェルの組み込みコマンドを実行するために指 そしてコピー呼び出し元は、 ``command.com / c''を目的のコマンドに追加します。 16ビットDOSアプリケーションがコンソールから標準入力を読み込んで終了すると、後で実行されるすべての16ビットDOSアプリケーションに標準入力が既に閉じられていると表示されます。 32ビットアプリケーションにはこの問題はなく、16ビットDOSアプリケーションが標準入力が閉じられていると判断した後でも、正しく動作します。現時点でこのバグの回避策はありません。 間のリダイレクトNUL: デバイスと16ビットアプリケーションが常に機能するとは限りません。からリダイレクトするときNUL:いくつかのアプリケーションがハングアップし、他のものが `` 0x01 ''バイトの無限ストリームを取得し、実際にはファイルの最後を正しく取得するものもあります。その動作は、アプリケーション自体にコンパイルされたものに依存するように見えます。 4K以上のリダイレクトを行う場合NUL:一部のアプリケーションがハングします。上記の問題は、32ビットアプリケーションでは発生しません。 すべてのDOS 16ビットアプリケーションは同期して実行されます。パイプから16ビットDOSアプリケーションへのすべての標準入力は、一時ファイルにまとめられます。 16ビットDOSアプリケーションの実行が開始される前に、パイプのもう一方の端を閉じる必要があります。16ビットDOSアプリケーションからパイプへのすべての標準出力またはエラーは、一時ファイルに収集されます。テンポラリファイルがパイプラインの次の段階にリダイレクトされる前に、アプリケーションを終了する必要があります。これは、パイプの実装におけるWindows 95のバグの回避策によるものであり、標準のWindows 95 DOSシェルがパイプ自体をどのように処理するかです。 特定のアプリケーション(たとえば、command.com対話的に実行すべきではありません。標準入力から読み込んで標準出力に書き込むのではなく、コンソールウィンドウに直接アクセスするアプリケーションは、失敗したり、Tclをハングしたり、独自のプライベートコンソールウィンドウが利用できない場合にシステムをハングすることさえあります。 マッキントッシュ ザexec コマンドは実装されておらず、Macintoshでは存在しません。 Unix ザexec コマンドは完全に機能し、説明どおりに動作します。 エラー(n)、オープン(n) 実行、パイプライン、リダイレクション、サブプロセス 重要: 使用 おとこ コマンド( % おとこ 特定のコンピュータでどのようにコマンドが使用されているかを確認することができます。 関連項目
キーワード