Go to main content
マニュアルページ セク ション 1: ユー ザーコマンド

印刷ビューの終了

更新: 2016年12月6日
 
 

runat(1)

名前

runat - 拡張属性名前空間でのコマンドの実行

形式

/usr/bin/runat file [command]

説明

runat ユーティリティーは、ファイルの非表示の属性ディレクトリにあるシェルコマンドを実行するために使用します。実際にはこのユーティリティーは、file 引数に関連付けられている非表示の属性ディレクトリに現在の作業ディレクトリを変更し、指定されたコマンドを Bourne シェル (/bin/sh) で実行します。コマンド引数が指定されていない場合は、対話型シェルが起動されます。環境変数 $SHELL は、起動されるシェルを定義します。この変数が未定義の場合は、デフォルトのシェル /bin/sh が使用されます。

file 引数には任意のファイルを指定できます。これには、拡張属性をサポートするディレクトリが含まれます。runat コマンドを呼び出す前に、このファイルに属性を設定したり、何らかの方法で準備したりする必要はありません。

オペランド

次のオペランドがサポートされています。

file

任意のファイル。これには、拡張属性をサポートするディレクトリが含まれます。

command

属性ディレクトリで実行するコマンド。

エラー

runatfile 引数にアクセスできない場合、または file 引数が拡張属性をサポートしない場合は、ゼロ以外の終了ステータスが返されます。

使用法

拡張ファイル属性の詳細については、fsattr(5) を参照してください。

runat コマンドによって作成されたプロセスのコンテキストでは、ファイルの拡張属性を含む非表示のディレクトリが、現在の作業ディレクトリとして設定されます。このディレクトリの親 (「..」エントリ) は、コマンド行で指定されたファイルを常に指しています。そのため、これはディレクトリではない可能性があります。したがって、親エントリが正しい形式であることに依存する (つまり、ディレクトリを参照する) コマンド (pwd など) は失敗する可能性があります。

command 引数が指定されていない場合、runat は、指定されたファイルの非表示の属性ディレクトリを現在の作業ディレクトリに設定して、新しい対話型シェルを起動します。前述のようにディレクトリの親がディレクトリではない場合は、いくつかのシェル (zshtcsh など) が正常に動作しない場合があります。これらのシェルは、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)。

属性の基本的な操作を行う際に推奨される方法は、次のとおりです。

display

runat file ls [options]

read

runat file cat attribute

作成/変更

runat file cp absolute-file-path attribute

delete

runat file rm attribute

アクセス権の変更
runat file chmod mode attribute
runat file chgrp group attribute
runat file chown owner attribute
対話型シェル
runat file /bin/sh または $SHELL に /bin/sh を設定して、 runat file

上記のリストには、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
/

環境変数

SHELL

runat によって呼び出されるコマンドシェルを指定します。

終了ステータス

次の終了ステータスが返されます。

125

file 引数によって参照されるファイルの属性ディレクトリにアクセスできない。

126

指定された command 引数の実行が失敗しました。

それ以外の場合は、指定されたコマンドを実行するために呼び出されたシェルの終了ステータスが返されます。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
CSI
有効
インタフェースの安定性
確実

関連項目

open(2), attributes(5), fsattr(5)

現在の作業ディレクトリを判別できない場合は、runat でコマンドが失敗する原因を特定できないことがあります。発生したエラーは、区別するのが困難であり、さまざまな解釈ができます (tcshzsh の例を参照)。