ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11 Information Library (日本語) |
- 他のコマンドを実行するためのシェル組み込み関数
exec [argument]...
eval [argument]...
exec command
eval argument...
source [-h] name
*exec [argument]...
*eval [argument]...
+exec [-c] [-a name] [command [argument ... ]]
+eval [argument]...
exec コマンドはこのシェルの代わりに、argument で指定されたコマンドを、新規プロセスは生成せずに実行します。入出力引数が指定可能で、その他の引数が指定されない場合は、これによってシェルの入出力が変更されます。
eval の組み込みの argument をシェルへの入力として読み取り、生成されるコマンドを実行します。
exec は現在のシェルの代わりに command を実行します。シェルは終了します。
eval は引数をシェルへの入力として読み取り、 生成されるコマンドを実行します。通常この指定は、コマンドまたは 変数置換の結果として生成されたコマンドを 実行するために使用します。
source は name からコマンドを読み取ります。source コマンドはネストできますが、あまり深くネストするとシェルのファイル記述子が不足する可能性があります。ソースファイル中のエラーは、それがいかなるレベルであろうと、 入れ子にされたすべての source コマンドを終了させます。
name が示す、履歴のリスト上のファイル からコマンドを持ってきますが、実行はしません。
exec 組み込み関数を使用して arg を指定すると、このシェルの代わりに引数で指定されたコマンドを、新規プロセスは生成せずに実行します。入出力引数が指定可能で、現在のプロセスに影響を及ぼす場合があります。引数を指定しない場合は、ファイル記述子が入出力リダイレクションリストの指定どおりに変更されることになります。この場合、この機能を使って開かれた、ファイル記述子番号が 2 より大きいファイルは、別のプログラムを起動すると閉じられます。
eval に続く引数をシェルへの入力として読み取り、 生成されるコマンドを実行します。
このマニュアルページでは、1 つまたは 2 つの * (アスタリスク) が先頭に付加されている ksh88(1) コマンドは、次のような特殊な処理を受けます。
コマンドが完了しても、コマンドの直前の変数代入リストは依然として有効です。
入出力のリダイレクトは変数代入後に行われます。
エラーが発生すると、それを含むスクリプトは中止されます。
変数代入形式で、 ** から始まるコマンドに続くワードは、 変数代入と同一の規則で展開されます。つまり、チルド置換は = 符号のあとに実行され、ワード分割とファイル名生成は実行されません。
exec は特殊な組み込みコマンドであり、これを使用するとファイル記述子を操作したり、現在のシェルを新しいコマンドに置き換えたりできます。
command を指定した場合、command を実行してその完了を待機するのではなく、現在のシェルプロセスが command によって置き換えられます。シェルでは、可能な場合は常に exec メカニズムが内部で暗黙的に使用されるため、パフォーマンスを向上させるために exec を使用する必要はありません。
オペランドを指定しない場合、exec を使用して、ファイルを開いたり閉じたりできます。また、すべてのコマンドで使用できる標準のリダイレクトメカニズムを使用して、現在のシェル環境で 0 から 9 までのファイル記述子を操作することもできます。別のプログラムが呼び出されたときにファイルが閉じられるように、この方法で開かれた、ファイル記述子番号が 3 以上のファイルには close-on-exec フラグが設定されます。
exec は特殊なコマンドであるため、どのようなエラーが発生しても、exec を呼び出したスクリプトは終了します。これは、command ユーティリティーから exec を呼び出すことで防止できます。
exec を制限付きシェルから呼び出して、ファイルを作成したり、書き込みまたは追加を行うためにファイルを開いたりすることはできません。
eval は、スペースで区切られた複数の argument を連結してコマンドを生成する、シェルの特殊組み込みコマンドです。生成される文字列は、シェルへの入力と見なされ、現在の環境で評価されます。コマンドワードは、2 回 (argument を生成するために 1 回、および生成されたコマンドをシェルが実行するときにもう 1 回) 展開されます。argument が指定されていなくても、エラーにはなりません。
このマニュアルページでは、1 つまたは 2 つの + 記号が先頭に付加されている ksh コマンドは特殊組み込みコマンドであり、次のような特殊な処理を受けます。
コマンドが完了しても、コマンドの直前の変数代入リストは依然として有効です。
入出力のリダイレクトは変数代入後に行われます。
エラーが発生すると、それを含むスクリプトは中止されます。
これらは有効な関数名ではありません。
変数代入形式で、++ から始まるコマンドに続くワードは、変数代入と同一の規則で展開されます。つまり、チルド置換は = 符号のあとに実行され、フィールド分割とファイル名生成は実行されません。
ksh exec では次のオプションがサポートされています。
argv[0] が、コマンドの name に設定されます。
現在の exec コマンドの一部である変数代入を除き、実行前にすべての環境変数をクリアします。
exec により、次の終了値が返されます。
正常終了。
リダイレクトエラーが発生しました。
command が見つかりませんでした。
command は見つかりましたが、実行可能なユーティリティーではありません。
exec により、次の終了値が返されます。command を指定した場合、exec は何も返しません。
正常終了。すべての入出力のリダイレクトが成功しました。
エラーが発生しました。
eval により、次の終了値が返されます。
argument を指定しない場合、終了ステータスは 0 となります。それ以外の場合は、argument オペランドによって定義されているコマンドの終了ステータスとなります。
属性についての詳細は、attributes(5) を参照してください。
|