SH(1V) — NEWS-OS Programmer’s Manual
名称
sh, rsh− シェルプログラミング言語 (標準シェルおよび機能の制限されたシェル)
形式
sh [ −acefhiknrstuvx ][ args ]
rsh [ −acefhiknrstuvx ][ args ]
解説
sh は端末やファイルから の入力によりコマンドを実行する プログラミング言語です。 rsh は標準のコマンドインタプリタ sh の機能が制限されたもので、 ログイン名をセットアップ したり、 標準のシェルよりも 実行環境をよりよくコントロールする 為に使用されます。 シェルへの 引き数については、 下記の 起動 を参照して下さい。
定義
blank はタブ または空白となります。 name はアンダースコアか英字で始まり、 アンダースコア、英数字で構成されます。 parameter は name、数字、 ‘∗’、 ‘@’、 ‘#’、 ‘?’、 ‘−’、 ‘$’、 ‘!’ です。
コマンド
単純コマンドは blank で区切られた word の並びです。 最初の word は 実行するコマンド名です。 下記に示す例以外の場合は、 コマンド名以外の残りの部分の word は引数として呼び出しコマンドに渡されます。 コマンド名は引数 0 として渡されます ( exec(2)参照)。 単純コマンドが正常終了すると、 返す値は終了ステータス となり、異常終了すると 8 進の 200+ステータス となります。 (ステータスについては signal(2) 参照)。
パイプラインは ‘ │’ で区切られた 1 つ以上の コマンドで構成されます。 (従来との互換から ‘│’ のかわりに ‘^’ も使えます。) 最後のコマンドを除いて 各コマンドの標準出力は pipe(2) によって、次のコマンド の標準入力になります。 各コマンドは別々のプロセスとして 実行されます。 そして、シェルは最後のコマンドの 終了を待ちます。 パイプラインの終了ステータスは、 最後のコマンドの終了ステータスとなります。
リストは ‘;’、 ‘&’、 ‘&&’、 あるいは ‘||’ で区切られた1つ以上の パイプラインで構成されます。 ‘||’ または ‘&’ で終っているものでもかまいません。 これら 4 つの記号のうち、 ‘;’ と ‘&’ は同じ優先度を持ち、 ‘&&’や ‘||’ よりも優先度が低くなっています。 ‘&&’と ‘||’ は、同じ優先度です。 ‘;’ は、順次実行を行います。 ‘&’ は前のパイプライン を同時に実行します。 (つまり、シェルはパイプラインが終了するのを 待ちません。) 記号 ‘&&’ (||) の場合、この 記号の前に指定したパイプラインが ゼロ (またはゼロ以外) の終了ステータス を返した場合に、記号の後のリストコマンド を実行します。 リスト内ではセミコロンの 代りにニューラインを使うこと もできます。
コマンドは単純コマンド または以下のコマンドのいずれかです。 コマンドの返す値はそのコマンド群の 中で実行された最後の単純コマンド が返す値になります。
for name [ in word ... ] do list done
for コマンドが実行されるごとに、 in word リストの次の word が、name に設定されます。 in word を指定しなかった場合、 設定された位置パラメタのそれぞれについて do list を実行します (パラメタについては、下記の パラメタの置き換え を参照。) リスト内に word がなくなると、 実行は終了します。
case word in [ pattern [ | pattern ] ... ) list ;; ] ... esac
case コマンドは word にマッチする最初の pattern に 対応する list を実行する。 pattern の形式は、スラッシュ、 リーディングドット、またはスラッシュの 直後のドットが一致する必要が ないことを除けば、 ファイル名の生成での 形式と同様です。 ( ファイル名の生成 参照。)
if list then list [ elif list then list ] ... [ else list ] fi
if の後の list が実行され、 もし値 ‘0’ の終了ステータスが返されると 最初の then に続く list が実行されます。 ‘0’ 以外のステータスの場合、 elif に続く list が実行され、 その値が ‘0’ なら 次の then に続く list が実行されます。 そうでなければ、 else list が実行されます。 else list または then list のどれも実行されなかった 場合、 if コマンドは ‘0’ の終了ステータス を返します。
while list do list done
while コマンドは while list を繰返し実行し、 list の最後のコマンドの終了ステータス が 0 の場合、 do list を実行します。 0 以外の場合、このループは終了します。 do list 内のコマンドがどれも実行されなかった 場合、 while コマンドはゼロの終了ステータス を返します。 ループ終了条件を反転させるために、 while の代りに until を使用することができます。
(list) サブシェル内で list を実行します。
{list;}
list が単に実行されます。
name () {list;}
name で呼び出される関数を定義します。 関数の内容は {および} で囲まれるコマンドの list です。 関数の実行は以下に述べます。 (Execution 参照。)
引用符で囲まれていない場合、 以下の各 word は最初の word として認識されます。
if then else elif fi case esac for while until do done { }
コメント
word の最初に # があれば、 それ以降ニューラインまでの word、および全ての文字を 無視します。
コマンド置き換え
逆引用符 (‘ ‘) で囲まれたコマンド からの標準出力は、word または word の一部とみなされ、 最後のニューラインは取り除かれます。
パラメタの置き換え
文字 $ は置き換えのできるパラメタを 取り出すのに使われます。 パラメタには位置パラメタと キーワードパラメタの2つの タイプがあります。 パラメタが数字の場合、 位置パラメタとなります。 位置パラメタは、 set コマンドによって値を設定できます。 (変数としても使われる)キーワードパラメタは、 次の記述で値を設定できます。
name=value [ name=value ] ...
パターンマッチングは value では行われません。 同じ name の関数と変数を使うことはできません。
${parameter}
parameter に値があれば置きかえられます。 中かっこ{ }は、 parameter の後にそのパラメタ名の一部として 解釈されない英数字、または アンダースコアが伴うときのみ 必要となります。 parameter が ∗ または @ の場合、 $1 で始まる全ての位置パラメタが (空白で区切られて) 置き換えられます。 パラメタ $0 には、 シェルが起動された時の 引数 0 が設定されます。
${parameter:−word}
parameter が設定され、ナル以外であれば、 その値に置き換わります。 そうでなければ、この式は word で置き換わります。
${parameter:=word}
parameter が設定されていない、 またはナルであれば parameter-word を設定し、 その式は parameter の値で 置き換えられます。 位置パラメタをこの方法で 設定することはできません。
${parameter:?word}
parameter が設定され、 ナル以外であればその値に置き換わります。 そうでなければ、 word を表示してしてシェルから抜け出します。 word が省略された場合、 メッセージ "parameter null or not set" ("パラメタがナルまたは設定されていない")が 表示されます。
${parameter:+word}
parameter が設定され、 ナル以外であれば word に置き換わります。 そうでなければ、 ナルに置き換わります。
上記の場合、 word は置き換わるべき文字列として 使われない限り、何も作用しません。 つぎの例で、 pwd は d が設定されないか、ナルの場合のみ実行されます。
echo ${d:−`pwd`}
上記の場合にコロン (:) を省略すると、 シェルはパラメタが設定されているかどうかだけ を確認します。
以下のパラメタはシェルによって自動的に設定されます。
# 位置パラメタの数(10進数)。
− シェル起動時または set コマンドによって設定されるフラグ。
? 順次に実行された最後のコマンドが返す値。(10 進数)
$ 当シェルのプロセス番号。
! 起動された最後のバックグラウンドのプロセス番号。
以下のパラメタはシェルによって使用できます。
HOME
cd コマンドに対するデフォルトの因数 (ホームディレクトリ)。
PATH コマンドのサーチパス。 .rsh のもとでは PATH は変更できません。 (以下の 実行 参照)。
CDPATH
cd コマンドのサーチパス。
MAIL このパラメタがメイルファイルの名称に設定され、 MAILPATH パラメタが設定されなかった場合、 シェルは指定ファイルのメイルの受信をユーザに知らせます。
MAILCHECK
MAILPATH または MAIL で指定された ファイルへのメイルの受信を、 シェルがどれだけの間隔(秒)で確認するかを指定します。 デフォルトの値は600秒 (10分)。 0 に設定すると、各プロンプトが表示される前に確認します。
MAILPATH
コロン (;) で分けられたファイル名称の リスト。このパラメタを設定した場合、 シェルは指定ファイルのすべてに対しての メイルの受信をユーザに知らせます。 各ファイル名の後には % を指定できますし、 更新時間が変更された場合には メッセージが出力されます。 デフォルトのメッセージは you have mail (メイル受信)。
PS1 最初のプロンプト文字。 デフォルトは $ 。
PS2 二番目のプロンプト文字。 デフォルトは > 。
IFS フィールド区切り文字を指定します。 通常は スペース、タブ、ニューライン です。
SHACCT
ユーザが書き込めるファイル名 にこのパラメタを設定した場合、 シェルは実行された各シェル手順に対して、 ファイルにアカウンティング記録を書き込みます。 acctcom(1) や acctcms(1M) の アカウンティングルーチンは、 データの解析に有効です。
SHELL
シェルが呼ばれると、 環境(下記の 環境 参照)から SHELL という名称をさがします。 その名称が発見され、 その値のファイル名の一部が ’r’ であれば、 シェルは機能の制限されたシェルとなります。
シェルはデフォルト値を PATH、 PS1、 PS2、 MAILCHECK、 および IFS.HOME に設定します。 MAIL は login(1) によって設定されます。
blank の解釈
置き換え処理後、置き換えの結果は フィールド区切り文字 ( IFS で指定される)があるか スキャンされます。 それがあるとその区切り文字のところで 個々の引数として分離されます。 明白なナル引数(" " または ") は残りますが、 (値の設定されていないパラメタの 置き換えから生じる) ナル引数は取り除かれます。
ファイル名生成
置き換え処理後、それぞれのコマンド word はその中に文字 ∗、 ?、 [ があるかスキャンされます。 ある場合、 word は pattern とみなされます。 word は、pattern にマッチする アルファベット順にソートされた ファイル名に置き換えられます。 もし pattern とマッチする ファイルが見つからないと、 その word は変更されず、 そのままとなります。ファイル名の 初め、または / の直後にある文字 ‘.’ または ‘/’ は ∗ や ? とはマッチ しないので明示しなければなりません。
∗ ナルを含む、任意の文字列とマッチします。
? 任意の一文字とマッチします。
[...] 囲まれた文字のうち任意の1文字とマッチします。 − で区切られた文字の ペアは、ペア間のコード順の任意の 文字とマッチします。 "[" の後の最初の文字が "!" の場合、 [....]に含まれない文字と マッチします。
引用符の使用
以下に示す文字はシェルに 対して特別の意味を持ちます。 また、引用符で囲まれない限り (クォートされない限り) word の終了であることを、意味します
; & ( ) │ ^ < > new-line space tab
を文字の前におくことによって ( 1 文字を)クォートできます。 0wline は無視されます。 シングルクォート(’)を除いて、 シングルクォートで囲まれた(’ ’) 全ての文字はクォートされます。 ダブルクォート(" ") の場合、 パラメタおよびコマンド の置き換えが 起こります。 、 ’、 、 $は、 で クォートすることによって 使えます。 "$∗" は "$1 $2....." と同等です。 また "$@" も "$1 $2....." と同等です。
プロンプトの表示
会話処理で使うと、 シェルはコマンドを 入力する前に PS1 の値を プロンプト文字として 使います。 ニューラインを入力しても、 コマンドが、完全な形にするために まだ入力を必要 とする場合、 第 2 のプロンプト文字(PS2) が表示されます。
入力/出力
コマンドが実行される前に シェルが解釈する特別の 記法で、入力と出力の リダイレクトを 行うことができます。 以下の記号は単純コマンドの任意の位置にあってもよく、 コマンドの前か後においても、 起動するコマンド に渡されることはありません。 word または digit は使用される前に 置き換えが起こります。
<word 標準入力としてファイル word を使用します (ファイルディスクリプタ 1)。
>word 標準出力としてファイル word を使用します (ファイルディスクリプタ 1)。 ファイルが存在しない場合、 生成されます。 そうでなければ、 初めにファイルサイズは0になります (ファイルは書き換えられます)。
>>word 標準出力としてファイル word を使用します。 そのファイルが存在する場合、 出力が付加されます。 (最初の end of file の 後に付加されます。) ファイルが存在しない場合、 ファイルは生成されます。
<<[−]word シェルは word と同じ行、 あるいは end of file までを 入力として 読み込みます。 ファイルの内容が 標準入力となります。 word のいずれかの文字が クォートされると、 ファイルの内容を 解釈しません。 さもなければファイルの 内容は解釈され、 パラメタ及びコマンド の置き換えがおこります。 0w line は無視され、 文字 $、’、 word の最初の1文字を クォートするために が、使われます。 − が << に付加されていた場合、 全てのタブは word と、ファイルの中から取り除かれます。
<&digit 標準入力として ファイルディスクリプタ digit に対応するファイル を使用します。 同様に標準出力の場合、 >&digit を使用します。
<− 標準入力がクローズされます。 同様に標準出力の場合、 >− を使用します。
上記のどれかの前に数字があると、 リダイレクトされる ファイルディスクリプタは、 (デフォルトの 0 または、1 のかわりに) 指定されたものになります。 例えば
... 2>&1
はファイルディスクリプタ 2 を、 ファイルディスクリプタ1の 複製になるようにします。 リダイレクトでは、順番が重要です。 シェルは左から右へと実行します。 例えば、
... 1>xxx 2>&1
とすると、 最初のファイルディスクリプタは ファイル xxx に接続されます。 ファイルディスクリプタ2は ファイルディスクリプタ1(xxx) に接続されます。 リダイレクトの順を逆にすると、 ファイルディスクリプタ 2 は端末 (ファイルディスクリプタ 1 とみなされる) に接続され、 ファイルディスクリプタ1はファイル xxx に接続されます。
コマンドの後に & が続く場合、 そのコマンドに対するデフォルトの 標準出力は空ファイル /dev/null となります。 そうでなければ、 起動されたシェルのファイルディスクリプタ と等しくなります。 シェルは、入出力先が変更されていることが あります。
リダイレクションは、機能の制限されたシェル では許されていません。
環境
環境( environ(5) 参照)は通常の引数リストと同様、 実行するプログラムに渡される name と 値(value) がペアになったリストです。 シェルは様々な方法で環境 とかかわりがあります。 起動時、 シェルは環境をスキャンし、 見つかったそれぞれの name に対する parameter を生成し、 それに対応する値を与えます。 各名称のパラメタを生成します。 ユーザがこれらのパラメタの 値を変更した場合 または新たにパラメタを 生成した場合、 export コマンドでシェルの パラメタをその環境 ( set −a も参照) に設定しないかぎり、 環境にはなにも影響ありません。 パラメタは unset コマンドで環境からは取り除かれます。 起動されたコマンドに渡される 環境は、 シェルによって元々引継がれて 修正されなかった name と値のペアから、 unset によって取り除かれ export によって追加修正されたものになります。
単純コマンドに関する環境は、 ひとつまたはそれ以上の パラメタの設定を 書くことによって 追加できます。
TERM=450 cmd と
(export TERM; TERM=450; cmd)
は同じになります ( cmd コマンドの実行が関連する限り)。
−k フラグを指定すると、 コマンド名の後にあったとしても 全てのキーワード引数は環境に 設定されます。 以下の例では、 最初は ‘ a=b c ’ を表示し、後のほうは ’c’ を表示します。
echo a=b c
set −k
echo a=b c
シグナル
呼び出しコマンドに対する INTERRUPT および QUIT シグナルは、 そのコマンドの後に & があれば 無視されます。 そうでなければ シグナル 11 (下記の trap コマンド 参照)を除いて、 シグナルはシェルが その親から引継いだ値を 持ちます。
実行
コマンドの実行されるごとにに、 上記の置き換えが行われます。 コマンドの名称が下記の Special Commands のどれか に一致すれば、 シェルのプロセスで 実行されます。 コマンドの名称が Special Command に一致しない場合でも、 定義された関数の名称に一致する場合、 関数はシェルのプロセスの 中で実行されます (これがシェルの手順 の実行とどう違うかに注意)。 位置パラメタ $1、 $2など が関数の引数に設定されます。 コマンドの名称が Special Command にも 定義された関数名とも一致しない 場合、 新しいプロセスが生成され excc(2) をとおして コマンドの実行が行われます。
シェルのパラメタ PATH は、コマンドを保持するディレクトリ に関する検索パスを定義します。 個々のディレクトリ名称は コロン (:) によって区切られます。 デフォルトのパスは :/bin:/usr/bin:/usr/sony/bin です。 (順にカレントディレクトリ、 パス名で指定されることに注意してください。 また、それはイコール記号の後、 パスリスト内のコロン記号の間に表れることも。 コマンド名が一つの / を含む場合、 サーチパスは使われません。 また、そのようなコマンドは 機能の制限されたシェルでは 実行されません。 そうでなければ、 パスの各ディレクトリから 実行可能ファイルが検索されます。 そのファイルが a.out ではなく 実行許可をもつファイルの場合、 シェルコマンドを保持するファイル とみなされます。 サブシェルはそれを読む為に 起動されます。 括弧に入れられたコマンド もサブシェル内で実行されます。
コマンドが発見された検索パス 内の位置はシェルに記憶されます (後で、不要な execs を無効にするのに 有効です)。 そのコマンドが相対ディレクトリ で発見されると、 カレントディレクトリが 変更された場合、 その位置は再決定されなければなりません。 PATH 変数が変更、 または hash −r コマンドが実行されると (下記参照) シェルは記憶していた位置情報を 忘れ去ります。
Special Commands
入出力のリダイレクトは、今ではこれらの特殊コマンドで 認められています。 ファイル記述子1はデフォルトの出力位置です。
: 影響なし。 コマンドは何も行いません。 ゼロの終了コードが返ります。
. file file から実行コマンドを読み取り、 返します。 PATH で指定した検索パスは file を保持するディレクトリを探す為に使用されます。
break [ n ]
どのような場合でも、 for または while のループから抜け出します。 n を指定すると、 その n レベルで停止します。
continue[n]
for または while ループ内の次のループを始めます。 n を指定すると、 n 番目のループから始めます。
cd[arg]
カレントディレクトリを arg に変更します。 シェルパラメタ HOME は arg のデフォルトです。 シェルパラメタ CHPATH は arg を保持するディレクトリにのサーチパスを定義します。 サーチするディレクトリ名はコロン(:) で区切られます。 デフォルトのサーチパスは <null> (カレントディレクトリ を指定)です。 引数がシェルに対する入力として読まれ、 イコール記号の直後、 またはパスリスト内の区切り文字コロン のナルのバス名で指定されます。 arg が // で始まる場合、 サーチパスは使用されません。 そうでなければ、 サーチパス内の各ディレクトリは arg に対して検索されます。 cd コマンドは rsh で実行できない場合があります。
echo [ arg ... ]
エコー引数。 echo(1V) を参照のこと。
eval [ arg ... ]
引数がシェルに対する入力として読まれ、 そのコマンドが実行されます。
exec [ arg ... ]
引数で指定された コマンドが新しいプロセスを 生成せずにシェルの 代りに実行されます。 入出力の引数が与えられ、 他に何も引数がなければ、 シェルの入出力を変更します。
exit [ n ]
n で指定する終了ステータスでシェルを 終了させます。 n が省略された場合、 終了ステータスは最後のコマンド のものとなります (end of fileもシェル を終了させます)。
export[name...]
指定の names は連続して実行される。 コマンドへ export します。 引数が与えられなかった場合、 このシェルに出力された全ての name の リストが出力されます。 関数名は export できません。
harsh[−r][name]
各 name に対して、 name で指定されたコマンド の検索パスの位置はシェル によって決められ、記憶されます。 −r オプションを指定すると、 シェルに全ての記憶していた位置を忘れさせます。 引数が与えられなかった場合、 記憶している位置に関する情報が出力されます。 Hints はコマンドがシェルプロセス で呼び出された回数を示します。 Cost はサーチパスからコマンド の位置を調べるための仕事量を しらべるためのものです。 コマンドの格納位置の再計算を要求する場合 があります。 このことは、コマンドの hint 情報に近接したアスタリスク (∗)で示されます。 最計算が行われると、 Cost は 1 増加します。
newgrp [ arg ... ]
exec newgrp arg と同様。 newgrp(1) 参照のこと。
pwd カレントの実行ディレクトリを出力する。 pwd(1) 参照のこと。
read [ name ... ]
標準入力から一行読まれ、最初の単語が最初の name に割り当てられます。 そして次の単語が 2 番目の name となります。 最後の単語は最後の name に割り当てられます。 end of file にならない限り、 リターンコードは 0 となります。
readonly[name...]
指定の name はリードオンリ (読み込み専用)となり、 これらの name の値は代入によって 変更できなくなります。 引数がないと、すべての リードオンリになっている name を表示します。
return[n]
n で指定のリターン値で関数を終了させます。 n を省略した場合、 リターンステータスは最後の コマンドの実行結果となります。
set[−−aefhkntuvx[arg
−a exportのために生成または、 変更された変数をあらわします。
−e コマンドがゼロ以外の終了ステータスで終了した場合、 ただちに終了します。
−f ファイル名の生成不可とします。
−h 関数が定義されるときに関数コマンドを配置し、記憶します。 (関数コマンドは通常、関数が実行されるときに配置されます)。
−k 全ての keyword 引数はコマンド名より先に置かれたものに限らず コマンドに対する環境に置かれます。 ただしコマンド名の前になることはない。
−n コマンドを読み込みを行いますが、 実行はしません。
−t コマンドを 1 個読み、 それを実行して終了します。
−u 置換の際、未設定変数 をエラーとして扱います。
−v シェルの入力行を読み込むごとに、 それを表示します。
−x コマンドとその引数を実行時に 表示します。
−− いかなるフラグも変更しません。 $1 を − に設定する場合に有効です。
− ではなく + を使用すると フラグをオフに設定できます。
これらのフラグはシェルの 起動時に使用できます。 カレントの設定フラグは $ で見れます。 残りの引数は positional パラメタ となり、 $1、$2 ...の順番で割り当てられます。 引数がないと 全ての name の値が表示されます。
shift[n]
$n+1 で始まる位置パラメタは $1... と再設定されます。 n を指定しなかった場合、 1とみなされます。
test 条件的判断をします。 test(1) 参照。
times シェルから実行されたプロセス のユーザおよびシステムの 積算時間を表示します。
trap [ arg ] [ n ]
シェルがシグナル n を受信すると、 コマンド arg が読まれ、実行されます。 (trap が設定された時とトラップが 取られた時に arg コマンド がスキャンされることに注意してください) Trap コマンドはシグナル番号順に 実行されます。 カレントシェルの最初でシグナルを 無視するように トラップを設定しても 効果はありません。 シグナル11(メモリーが不良)に対する trap はエラーとなります。 arg を指定しなかった場合、 シグナル番号 n のすべての トッラプは元の値にリセット されます。 arg がナル文字列の場合、 このシグナルはシェルおよび 呼び出したコマンドによって 無視されます。 n が 0 の場合、 コマンド arg はシェルからの 終了時に実行されます。 引数なしの trap コマンドは 各シグナル番号に対応する コマンドのリスト を表示します。
type [ name ... ]
各 name に対して コマンド名として使用された場合、 どのように解釈されるかを示します。
ulimit[−[HS][a|cdfmst]]
ulimit[−[HS][c|d|
ハードまたはソフトの 資源の限界を表示します。 これらの制限は getflimit(2) を参照して下さい。 limit が存在しなかった場合、 ulimit は指定限界値を表示します。 まったく限界値を表示しない 場合もあります。 −a オプションを指定すると、 全ての限界値を表示します。 limit が存在した場合、 ulimit は指定の限界値を limit に設定します。 文字列 unlimited は最大の有効限界値を要求します。 限界値は同時に一つの資源に 対して設定されることもあります。 ユーザはハードの限界値よりも少ない 値を設定しなければなりません。 すべてのユーザーがハードの 限界値を下げることができます。 スーパユーザだけがハードの限界値を上げること ができます。 su(1) 参照。
−H オプションでハードの値を設定します。 −S オプションでソフトの値を設定します。 どちらも指定しなかった場合、 ulimit は両方の限界値を設定し、 ソフトの限界値を表示します。
以下のオプションを指定すると、 その資源の限界値が表示され オプションを指定しないと、 そのファイルサイズの限界値を表示 または設定します。
−c最大のコアファイルサイズ(512バイトブロック単位)。 −dデータセグメントまたはヒープの 最大値(キロバイト単位)。 −f 最大のファイルサイズ(512バイトブロック単位)。 −m プロセスの最大サイズ(キロバイト単位)。 −s スタックセグメントの最大サイズ(キロバイト 単位)。 −t 最大の CPU 時間(秒単位)
umask [ nnn ]
ユーザのファイル生成マスクが nnn に設定されます。 ( umask(2) 参照)。 nnn を省略した場合、 マスクのカレントの値が表示されます。
unset [ name ... ]
各 name に対して、 対応する変数または 関数を取り除きます。変数 PATH、PS1、PS2、MAILCHECK、および IFS は取り除けません。
wait [ n ]
指定プロセスを待ち、 その終了ステータスを報告します。 n を指定しなかった場合、 カレントの子プロセスの終了を まち、もどり値は0となります。
起動
シェルが execl(2) を通じて起動され、 引数ゼロの最初の文字が − の場合、 コマンドは次のファイルが、 存在した場合 /etc/profile と、 &HOME/.profile から読まれます。 そして、コマンドは以下のように 読まれます。 また、シェルが //bin/sh. として 呼ばれた場合でもそうなります。 下記のフラグは起動時のシェル によって解釈されます。 −c または −s フラグが指定されていなくても、 最初の引数はコマンドが書かれた ファイル名とされ、 残りの引数は位置パラメタとして そのコマンドファイル に渡されます。
−cstring
−c フラグがあると、 コマンドは string より読まれます。
−s −s フラグがあるか 引数なしでシェルを起動すると コマンドは標準入力から読まれます。 sの後の引数は位置パラメタ となります。 シェル出力 (特殊コマンドを除く)はファイルディスクリプタ2 に出力されます。
−i −i フラグがあるか、 またはシェル入出力が端末に接続されていると、 このシェルは会話型となります。 この場合、 TERMINATE シグナルは無視されます。 ( ‘kill 0’ は会話型シェルを終了させません) シグナル INTERRUPT は受付られますが、 無視されます。 ( wait は割り込み可能です)。 どんな場合でもシェルは、 シグナル QUIT を無視します。
−r −r フラグが存在する場合、 シェルは機能の制限されたシェルとなります。
残りのフラグおよび 引数は上記のsetコマンド で述べられています。
rsh のみ
rsh は、ログイン名の設定が実行環境の 設定に使用されます。 rsh は、これらのことに関しては、 標準のシェルよりもうまく 制御できます。 rshの機能は以下の機能を除き sh のものと同様です。 ただし、以下の機能を除きます。
ディレクトリの変更(cd(1)参照) $PATHの値の設定 //を持つパスまたはコマンドの指定 出力のリダイレクト(> および >>)
上記の制限は .profile が解釈された後、 付け加えられます。
実行するコマンドがシェルの手順の中に 発見された場合、 rsh は sh を起動します。このようにして 標準のシェルの機能をエンドユーザ のシェルに割り当てることもでき、一方 使用できるコマンドを制限することもできます。 この方法で、 エンドユーザは同一のディレクトリに 書き込み許可と実行許可を もたないようにすることが できます。
本当の目的は、 認められた設定に従って、 ユーザが適切なディレクトリ (ログインのディレクトリではない) を使用するようにしむけ、 /.profileの作成者がユーザの 操作を完全に制御できることにあります。
システムの管理者は時々、 rsh から安全に起動される。 コマンド(/usr/rbin) のディレクトリを設定します。 いくつかのシステムでは 制限付のエディタ red を用意してあります。
マルチ言語サポート
sh は日本語の漢字用の入力 テキストファイルを含んだ マルチ言語処理を行います。 tty モードを sjis、euc、jis などに設定することで、 ASCII 文字を入力するように漢字を入力 できます。 ダブルクォーテーション記号(")、 アンパーサンド(&)、 垂直バー(|)、 セミコロン(;)、 以下の記号(<)、 以上の記号(>)、 括弧記号(()、 閉じ括弧記号())、 などのメタ文字は ASCII 文字となります。 全角のダブルクォーテーション記号や アンパーサンドなど は通常の文字としてに扱われます。 従って、全角の空白 (shift JIS コード 0x8140 や EUCコード 0xa1a1)は引数の区切り文字としては 使用できません。
2バイトコードはファイル名のメタ文字、 アスタリスク(∗)、 クエスチョンマーク(?)、 ブラケット([および])に対する 文字として扱われます。
漢字は従来の関数、Shell変数、 環境変数などで使用できます。
終了ステータス
シェルによって検知されるエラー、 シンタックスエラーなどは シェルにゼロ以外の終了ステータス を返させます。 シェルを使用している場合、 シェルファイル独自の実行は 認められません。 そうでなければ、 シェルは実行された最終のコマンド の終了ステータス を返します(上記の exit コマンド参照)。
関連ファイル
//etc/profile $HOME/.profile /tmp/sh∗ /dev/null
関連事項
acctcom(1), cd(1), echo(1), env(1), login(1), newgrp(1), pwd(1), test(1), umask(1). acctcms(1M), dup(2), exec(2), fork(2), pipe(2), signal(2), ulimit(2), umask(2), wait(2), a.out(4), profile(4), environ(5)
警告
コマンドが実行された後、 オリジナルのコマンドがあるディレクトリ よりも前にサーチされるディレクトリに 同じ名前でコマンドを インストールした場合、シェルは オリジナルのコマンドを 実行します。(インストールされた コマンドを実行しません。) この状態の修正は、 hash コマンドで行います。 カレントディレクトリまたは その上位ディレクトリを移動した場合、 pwd は正常な反応をしない場合があります。 この状態の修正は、 フルパス名で cd コマンドを使用すること で解決できます。
備考
setuid / setgid のシェルスクリプトについて
NEWS-OS Release 4.0 より、セキュリティ上の問題から setuid または setgid されたシェルスクリプトを実行する際、 コマンドのサーチパスを以下のように変更します。
シェル設定されるサーチパス
/bin/csh(/usr/ucb /bin /usr/bin /usr/sony/bin)
/bin/sh/bin:/usr/bin:/usr/sony/bin
必要に応じてシェルスクリプト中でサーチパスを再設定してください。
setuid されたアプリケーションプログラムから system() 関数や popen() 関数を使用する場合も、同様です。 これらの場合は、コマンドはフルパスで指定するようにしてください。
NEWS-OSRelease 4.1C