ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11 Information Library (日本語) |
- 拡張属性名前空間でのコマンドの実行
/usr/bin/runat file [command]
runat ユーティリティーは、ファイルの非表示の属性ディレクトリにあるシェルコマンドを実行するために使用します。実際にはこのユーティリティーは、file 引数に関連付けられている非表示の属性ディレクトリに現在の作業ディレクトリを変更し、指定されたコマンドを Bourne シェル (/bin/sh) で実行します。コマンド引数が指定されていない場合は、対話型シェルが起動されます。環境変数 $SHELL は、起動されるシェルを定義します。この変数が未定義の場合は、デフォルトのシェル /bin/sh が使用されます。
file 引数には任意のファイルを指定できます。これには、拡張属性をサポートするディレクトリが含まれます。runat コマンドを呼び出す前に、このファイルに属性を設定したり、何らかの方法で準備したりする必要はありません。
次のオペランドがサポートされています。
任意のファイル。これには、拡張属性をサポートするディレクトリが含まれます。
属性ディレクトリで実行するコマンド。
runat が file 引数にアクセスできない場合、または file 引数が拡張属性をサポートしない場合は、ゼロ以外の終了ステータスが返されます。
拡張ファイル属性の詳細については、fsattr(5) を参照してください。
runat コマンドによって作成されたプロセスのコンテキストでは、ファイルの拡張属性を含む非表示のディレクトリが、現在の作業ディレクトリとして設定されます。このディレクトリの親 (「..」エントリ) は、コマンド行で指定されたファイルを常に指しています。そのため、これはディレクトリではない可能性があります。したがって、親エントリが正しい形式であることに依存する (つまり、ディレクトリを参照する) コマンド (pwd など) は失敗する可能性があります。
command 引数が指定されていない場合、runat は、指定されたファイルの非表示の属性ディレクトリを現在の作業ディレクトリに設定して、新しい対話型シェルを起動します。前述のようにディレクトリの親がディレクトリではない場合は、いくつかのシェル (zsh、tcsh など) が正常に動作しない場合があります。これらのシェルは、runat とともに使用しないでください。
例 1 runat を使用したファイルの拡張属性の一覧表示
example% runat file.1 ls -l example% runat file.1 ls
例 2 拡張属性の作成
example% runat file.2 cp /tmp/attrdata attr.1 example% runat file.2 cat /tmp/attrdata > attr.1
例 3 あるファイルから別のファイルへの属性のコピー
example% runat file.2 cat attr.1 | runat file.1 "cat > attr.1"
例 4 runat を使用した対話型シェルの起動
example% runat file.3 /bin/sh
これは、file.3 の属性ディレクトリで新しいシェルを起動します。このシェルは現在のディレクトリを判別できません。属性ディレクトリから出るには、起動されたシェルを終了するか、絶対パスを使用してディレクトリを変更します (cd)。
属性の基本的な操作を行う際に推奨される方法は、次のとおりです。
runat file ls [options]
runat file cat attribute
runat file cp absolute-file-path attribute
runat file rm attribute
runat file chmod mode attribute runat file chgrp group attribute runat file chown owner attribute
上記のリストには、runat とともに動作することがわかっているコマンドが含まれています。その他の多くのコマンドが動作する可能性はありますが、このリスト以外のコマンドの動作は保証されていません。現在の作業ディレクトリを判別できることに依存するコマンドは、失敗する可能性があります。そのようなコマンドの例を次に示します。
例 5 属性ディレクトリでの man コマンドの使用
example% runat file.1 man runat >getcwd: Not a directory
例 6 属性ディレクトリでの tcsh シェルの起動
example% runat file.3 /usr/bin/tcsh tcsh: Not a directory tcsh: Trying to start from "/home/user"
ユーザーのホームディレクトリを現在の作業ディレクトリに設定して、新しい tcsh シェルが起動されました。
例 7 属性ディレクトリでの zsh シェルの起動
example% runat file.3 /usr/bin/zsh example%
コマンドは実行されたように見えますが、実際には zsh は現在の作業ディレクトリを「/」に変更しただけです。これは、/bin/pwd を使用して表示できます。
example% /bin/pwd /
runat によって呼び出されるコマンドシェルを指定します。
次の終了値が返されます。
file 引数によって参照されるファイルの属性ディレクトリにアクセスできない。
指定された command 引数の実行が失敗しました。
それ以外の場合は、指定されたコマンドを実行するために呼び出されたシェルの終了ステータスが返されます。
属性についての詳細は、attributes(5) を参照してください。
|
open(2), attributes(5), fsattr(5)
現在の作業ディレクトリを判別できない場合は、runat でコマンドが失敗する原因を特定できないことがあります。発生したエラーは、区別するのが困難であり、さまざまな解釈ができます (tcsh と zsh の例を参照)。