Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sh(1) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cd(1)

echo(1V)

env(1)

login(1)

pwd(1)

test(1)

umask(1)

dup(2)

exec(2)

fork(2)

pipe(2)

umask(2)

wait(2)

setlocale(3)

signal(3)

profile(4)

a.out(5)

environ(7)

SH(1)  —  NEWS-OS Programmer’s Manual

名称

sh − シェルプログラミング言語

形式

sh [ −acefhiknrstuvx ] [ args ]

解説

sh は端末やファイルからの入力によりコマンドを実行するプログラミング言語です。 rsh は標準のコマンドインタプリタ sh の機能が制限されたもの (restricted shell) で、 ログイン名をセットアップしたり、 標準のシェルよりも実行環境をよりよくコントロールするために使用されます。
NEWS-OS Release 4.0 では rsh はリモートシェルが起動されますが (rsh(1C) 参照)、ここでは説明の都合上、機能が制限されたシェルを rsh と呼び解説しています。
シェルへの引き数については、下記の 起動 を参照して下さい。

定義

blank とはタブまたは空白です。 name とはアンダースコアか英字で始まり、 アンダースコア、英数字からなる文字列です。 parameter とは、 name、 数字、 ∗、@、#、 ?、−、$、 !  です。

コマンド

単純コマンド とは blank で区切られた word の並びです。 最初の word は実行するコマンド名です。 下記に示す例以外の場合は、コマンド名以外の残りの部分の word は引数として呼び出しコマンドに渡されます。 コマンド名は引数 0 として渡されます (exec(2) 参照)。 単純コマンドが正常終了すると、返す値は終了ステータスとなり、 異常終了すると 8 進の 200 +「ステータス」となります。 (ステータスについては signal(3C) 参照)。

パイプライン は │ で区切られた 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 コマンドは 0 の終了ステータスを返します。 ループ終了条件を反転させるために、 while の代りに until を使用することができます。

(list) サブシェル内で list を実行します。

{ list;}
list を現在のシェルで実行します。 { の後にスペースが必要です。

name(){ list;}
name で呼び出される関数を定義します。 関数の内容は { および } で囲まれるコマンドの list です。 { の後にスペースが必要です。 関数の実行については以下に述べます。 (実行 参照。)

以下の各 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 に値が設定されていない、またはナルであれば word を parameter に設定し、その式は parameter の値で置き換えられます。 位置パラメータをこの方法で設定することはできません。

${parameter:?word}
parameter に値が設定され、ナル以外であればその値に置き換わります。 そうでなければ、 word を表示してしてシェルから抜けます。 word が省略された場合、 メッセージ parameter null or not set (パラメータがナルまたは設定されていない) が表示されます。

${parameter:+word}
parameter に値が設定され、ナル以外であれば word に置き換わります。 そうでなければ、ナルに置き換わります。

上記の場合、 word は置き換わるべき文字列として使われない限り、評価されません。 したがって、つぎの例では、 d が設定されていないか、ナルの場合のみ pwd が実行されます。

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 1 次プロンプト文字。 デフォルトは  ‘$ ’。

PS2 2 次プロンプト文字。 デフォルトは  ‘> ’。

IFS フィールド区切り文字を指定します。 通常は スペース、タブ、ニューライン です。

LANG
このパラメータが設定されていると、 シェルはこれを使って locale を判定します。 environ(7)、setlocale(3) を参照してください。

SHACCT
ユーザが書き込めるファイル名にこのパラメータを設定した場合、 シェルは実行された各シェル手順に対して、 ファイルにアカウンティング記録を書き込みます。

SHELL
シェルが呼ばれると、環境 (下記の 環境 参照) から SHELL という名称をさがします。 その名称が発見され、その値のファイル名の部分が rsh であれば、シェルは機能の制限されたシェルとなります。

シェルはデフォルト値を 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 文字をクォートできます。 \newline は無視されます。 シングルクォートで囲まれた全ての文字は、シングルクォート (’) を除いてクォートされます。 ダブルクォート (" ") の場合、 パラメータおよびコマンドの置き換えが起こります。 \、’、 "、 $ は、 \ でクォートすることによって使えます。 "$∗" は "$1 $2 ..." と同等です。 また "$@" は "$1" "$2" ... と同等です。

プロンプトの表示

会話処理で使うと、シェルはコマンドを入力する前に PS1 の値をプロンプト文字として使います。 ニューラインを入力しても、 コマンドが、完全な形にするためにまだ入力を必要とする場合、 2 次プロンプト文字 (PS2) が表示されます。

入力/出力

コマンドが実行される前にシェルが解釈する特別の記法で、 入力と出力のリダイレクトを行うことができます。 以下の記号は単純コマンドの任意の位置にあってもよく、 コマンドの前か後においても、 起動するコマンドに渡されることはありません。 word または digit は使用される前に置き換えが起こります。

<word 標準入力としてファイル word を使用します (ファイル記述子 0)。

>word 標準出力としてファイル word を使用します (ファイル記述子 1)。 ファイルが存在しない場合、生成されます。 そうでなければ、 初めにファイルサイズは 0 になります (ファイルは書き換えられます)。

>>word 標準出力としてファイル word を使用します。 そのファイルが存在する場合、 出力が付加されます (最初の ファイルの終わり (EOF) の後に付加されます)。 ファイルが存在しない場合、ファイルは生成されます。

<<[−]word シェルは word と同じ行、あるいは ファイルの終わり (EOF) までを 入力として読み込みます。 ファイルの内容が標準入力となります。 word にクォートで囲まれた文字がある場合は、ファイルの内容を解釈しません。 クォートで囲まれた文字がない場合は、 ファイルの内容が解釈されます。 このとき、パラメータおよびコマンドが置き換えられ、 (エスケープされていない) \newline は無視されます。 そのため、 \、$、´ と 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(7) 参照) は通常の引数リストと同様、実行するプログラムに渡される name と値  (value) がペアになったリストです。 シェルは様々な方法で環境とかかわりがあります。 起動時、シェルは環境をスキャンし、見つかったそれぞれの name に対する parameter を生成し、それに対応する値を与えます。 各名称のパラメータを生成します。 ユーザがこれらのパラメータの値を変更した場合、 または新たにパラメータを生成した場合、 export コマンドでシェルのパラメータをその環境  (set −a も参照) に設定しないかぎり、環境にはなにも影響ありません。 パラメータは unset コマンドで環境からは取り除かれます。 起動されたコマンドに渡される環境は、 シェルによって元々引継がれて修正されなかった name と値のペアから unset によって取り除かれたものを削除し、 export によって追加修正されたものになります。

単純コマンドに関する環境は、 ひとつまたはそれ以上のパラメータの設定を書くことによって追加できます。

TERM=450 cmd

(export TERM; TERM=450; cmd)

この 2 つは同じになります (cmd コマンドの実行に関する限り)。

−k フラグを指定すると、 コマンド名の後にあったとしても全てのキーワード引数は環境に設定されます。 以下の例では、最初は a=b c を表示し、後のほうは c を表示します。

echo a=b c
set −k
echo a=b c

シグナル

呼び出しコマンドに対する INTERRUPT および QUIT シグナルは、 そのコマンドの後に & があれば無視されます。 そうでなければ シグナル 11 (下記の trap コマンド参照) を除いて、シグナルはシェルがその親から引継いだ値を持ちます。

実行

コマンドの実行されるごとに、上記の置き換えが行われます。 コマンドの名称が下記の Special Commands のどれかに一致すれば、シェルのプロセスで実行されます。 コマンドの名称が Special Commands に一致しない場合でも、定義された関数の名称に一致する場合、 関数はシェルのプロセスの中で実行されます (これがシェルの手順 の実行とどう違うかに注意)。 位置パラメータ $1、$2 などが関数の引数に設定されます。 コマンドの名称が Special Commands にも定義された関数名とも一致しない場合、 新しいプロセスが生成され、 exec(2) をとおしてコマンドの実行が行われます。

シェルのパラメータ PATH は、コマンドを保持するディレクトリに関する検索パスを定義します。 個々のディレクトリ名称はコロン  (:) によって区切られます。 デフォルトのパスは :/bin:/usr/bin:/usr/sony/bin です (順にカレントディレクトリ、 /bin、/usr/bin、/usr/sony/bin)。 カレントディレクトリはナルのパス名で指定されることに注意してください。 ナルのパス名は、イコールの直後、パスリストの 2 つのコロンの間、 パスリストの最後に入れることができます。 コマンド名に / を含む場合、サーチパスは使われません。 また、そのようなコマンドは機能の制限されたシェルでは実行できません。 / がなければ、パスの各ディレクトリから実行可能ファイルが検索されます。 そのファイルが a.out ではなく実行許可をもつファイルの場合、 シェルコマンドを保持するファイルとみなされます。 サブシェルはそれを読むために起動されます。 括弧に入れられたコマンドもサブシェル内で実行されます。

コマンドが発見された検索パス内の位置はシェルに記憶されます (後で、不要な exec を実行しないためです)。 コマンドが見つかったのが相対ディレクトリの場合、その位置は、 カレントディレクトリが変更されるたびに再決定されます。 PATH 変数が変更されるか、または hash −r コマンドが実行されると (下記参照)、 シェルは記憶していた位置情報を忘れ去ります。

Special Commands

入出力のリダイレクトは、今ではこれらの特殊コマンドで認められています。 ファイル記述子 1 はデフォルトの出力位置です。

: 影響なし。 コマンドは何も行いません。 ゼロの終了コードが返ります。

. file file からコマンドを読み取って実行し、戻ります。 file を含むディレクトリを探すために PATH で指定した検索パスが使用されます。

break [ n ]
どのような場合でも、 for または while のループから抜け出します。 n を指定すると、その n レベルを抜け出します。

continue [ n ]
for または while ループ内の次のループを始めます。 n を指定すると、 n 番目のループから始めます。

cd [ arg ]
カレントディレクトリを arg に変更します。 シェルパラメータ HOME は arg のデフォルトです。 シェルパラメータ CHPATH は arg を保持するディレクトリのサーチパスを定義します。 サーチするディレクトリ名はコロン (:) で区切られます。 デフォルトのサーチパスは空 (カレントディレクトリを指定) です。 カレントディレクトリはナルのパス名で指定されます。 ナルのパス名はイコール記号の直後、 あるいはパスリスト中の 2 つのコロンの間に置くことができます。 arg が / で始まる場合、サーチパスは使用されません。 そうでなければ、サーチパス内の各ディレクトリは arg に対して検索されます。 cd コマンドは rsh で実行できない場合があります。

echo [ arg ... ]
エコー引数。 echo(1) を参照のこと。

eval [ arg ... ]
引数がシェルに対する入力として読まれ、そのコマンドが実行されます。

exec [ arg ... ]
新しいプロセスを生成せずに、 引数で指定されたコマンドがシェルの代りに実行されます。 入出力の引数が与えられ、他に何も引数がなければ、 シェルの入出力を変更します。

exit [ n ]
n で指定する終了ステータスでシェルを 終了させます。 n が省略された場合、終了ステータスは最後のコマンドのものと なります (ファイルの終わり (EOF) もシェルを終了させます)。

export [ name ... ]
指定の name を連続、コマンドへ export します。 引数が与えられなかった場合、そのシェルで export された全ての name のリストが出力されます。 関数名は export できません。

hash [−r] [ name ... ]
各 name に対して、 name で指定されたコマンドの検索パスの位置は、 シェルによって決められ、記憶されます。 −r オプションを指定すると、シェルに全ての記憶していた位置を忘れさせます。 引数が与えられなかった場合、記憶している位置に関する情報が出力されます。 hits はコマンドがシェルプロセスで呼び出された回数を示します。 cost はサーチパスからコマンドの位置を調べるための仕事量を調べるためのものです。 コマンドの格納位置の再計算を要求する場合があります。 このことは、コマンドの hits 情報に近接したアスタリスク (∗) で示されます。 再計算が行われると、 cost は 1 増加します。

pwd カレントの実行ディレクトリを出力します。 pwd(1) を参照してください。

read [ name ... ]
標準入力から一行読まれ、最初の単語が最初の name に割り当てられます。 そして次の単語が 2 番目の name となります。 最後の単語は最後の name に割り当てられます。 ファイルの終わり (EOF) にならない限り、リターンコードは 0 となります。

readonly [ name ... ]
指定の name はリードオンリ (読み込み専用) となり、これらの name の値は代入によって変更できなくなります。 引数がないと、すべてのリードオンリになっている name を表示します。

return [ n ]
n で指定されたリターン値で関数を終了させます。 n を省略した場合、 リターン値は最後の コマンドの実行結果となります。

set [ −−aefhkntuvx [ arg ... ] ]

−a export のために生成または変更された変数をあらわします。

−e コマンドがゼロ以外の終了ステータスで終了した場合、 ただちに終了します。

−f ファイル名の生成を禁止します。

−h 関数が定義されるときに関数コマンドを配置し、記憶します。 (関数コマンドは通常、関数が実行されるときに配置されます)。

−k コマンド名に先行するものだけでなく、 すべてのキーワード引数をコマンドの環境に置きます。

−n コマンドを読み込みを行いますが、実行はしません。

−t コマンドを 1 個読み、それを実行して終了します。

−u 置換の際、未設定変数をエラーとして扱います。

−v シェルの入力行を読み込むごとに、それを表示します。

−x コマンドとその引数を実行時に表示します。

−− いかなるフラグも変更しません。 $1 を − に設定する場合に有効です。

− ではなく + を使用すると フラグをオフに設定できます。 これらのフラグはシェルの起動時に使用できます。 カレントの設定フラグは $- で見ることができます。 残りの引数は 位置パラメータとなり、 $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 | cdfmnst]]

ulimit [ −[HS][c | d | f | m | n | s | t ]] limit
ハードまたはソフトの資源の限界を表示します。 limit が存在しなかった場合、 ulimit は指定限界値を表示します。 まったく限界値を表示しない場合もあります。 −a オプションを指定すると、全ての限界値を表示します。 limit が存在した場合、 ulimit は指定の限界値を limit に設定します。 文字列 unlimited は最大の有効限界値を要求します。 限界値は同時に一つの資源に対して設定されることもあります。 ユーザはハードの限界値よりも少ない値を設定しなければなりません。 すべてのユーザがハードの限界値を下げることができます。 スーパユーザだけがハードの限界値を上げることができます。 su(1) 参照。

−H オプションでハードの値を設定します。 −S オプションでソフトの値を設定します。 どちらも指定しなかった場合、 ulimit は両方の限界値を設定し、ソフトの限界値を表示します。

以下のオプションを指定すると、 その資源の限界値が表示され オプションを指定しないと、 そのファイルサイズの限界値を表示 または設定します。

−c最大のコアファイルサイズ (512 バイトブロック単位)。
−dデータセグメントまたはヒープの最大値 (キロバイト単位)。
−f最大のファイルサイズ (512 バイトブロック単位)。
−mプロセスの最大サイズ (キロバイト単位)。
−nopen できるファイルの最大数。
−sスタックセグメントの最大サイズ (キロバイト単位)。
−t最大の CPU 時間 (秒単位)。

umask [ nnn ]
ユーザのファイル生成マスクが nnn に設定されます。 (umask(2) 参照)。 nnn を省略した場合、マスクのカレントの値が表示されます。

unset [ name ... ]
各 name に対して、対応する変数または関数を取り除きます。変数 PATH、PS1、PS2、 MAILCHECK、IFS は取り除けません。

wait [ n ]
指定プロセスを待ち、 その終了ステータスを報告します。 n を指定しなかった場合、カレントの子プロセスの終了を待ち、 もどり値は 0 となります。

起動

シェルが exec(2) を通じて起動され、引数ゼロの最初の文字が − の場合、コマンドは次のファイルが存在した場合、 /etc/profile と $HOME/.profile が読まれます。 そして、コマンドは以下のように読まれます。 また、シェルが /usr/bin/sh として呼ばれた場合でもそうなります。 下記のフラグは起動時のシェルによって解釈されます。 −c または −s フラグが指定されない場合、 最初の引数はコマンドが書かれたファイル名とされ、 残りの引数は位置パラメータとしてそのコマンドファイルに渡されます。

-c string
−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 は日本語の漢字用の入力テキストファイルを含んだマルチ言語処理を行います。 端末モードを sjis、euc、jis などに設定することで、 ASCII 文字を入力するのと同じように漢字を入力できます (stty(1) を参照)。 ダブルクォーテーション記号 (")、 アンパーサンド (&)、 垂直バー (|)、 セミコロン (;)、 以下の記号 (<)、 以上の記号 (>)、 括弧記号 (()、 閉じ括弧記号 ())、 などのメタ文字は ASCII 文字となります。 全角のダブルクォーテーション記号やアンパーサンドなどは 通常の文字としてに扱われます。 従って、 全角の空白 (シフト JIS コード 0x8140 や EUC コード 0xa1a1) は 引数の区切り文字としては使用できません。

2 バイトコードはファイル名のメタ文字、 アスタリスク (∗)、 クエスチョンマーク (?)、 ブラケット ([ および ]) に対する文字として扱われます。

漢字は、シェル変数や環境変数の値として使用できます。

終了ステータス

シェルによって検知されるエラー、シンタックスエラーなどは シェルにゼロ以外の終了ステータスを返させます。 シェルを使用している場合、シェルファイル独自の実行は認められません。 そうでなければ、 シェルは実行された最終のコマンドの終了ステータスを返します (上記の exit コマンド参照)。

関連ファイル

/etc/profile, $HOME/.profile, /tmp/sh∗, /dev/null

関連事項

cd(1), echo(1V), env(1), login(1), pwd(1), test(1), umask(1).  dup(2), exec(2), fork(2), pipe(2), umask(2), wait(2), setlocale(3), signal(3), profile(4), a.out(5), environ(7),

警告

コマンドが実行された後、 オリジナルのコマンドがあるディレクトリよりも前にサーチされる ディレクトリに同じ名前でコマンドをインストールした場合、 シェルはオリジナルのコマンドを実行します。 (インストールされたコマンドを実行しません。) この状態の修正は、 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
/usr/5bin/sh/usr/5bin:/bin:/usr/bin:/usr/sony/bin

必要に応じてシェルスクリプト中でサーチパスを再設定してください。

setuid されたアプリケーションプログラムから system(3) 関数や popen(3S) 関数を使用する場合も、同様です。 これらの場合は、コマンドはフルパスで指定するようにしてください。

System V 仕様

/usr/bin/sh を使用したときは、シェルの PATH 変数で /usr/5bin が /usr/bin の前にあるかどうかで、 シェルは、BSD 仕様か、System V 仕様かが選択されます。

/usr/5bin/sh を使用したときは PATH の設定に関係なく System V 仕様となります。

BSD 仕様と System V 仕様で異なるのは以下の 3 つです。
組み込みコマンド echo (echo(1) を参照)
組み込みコマンド test (test(1) を参照)
setuid または setgid されたシェルスクリプトを実行する際、 変更されるコマンドのサーチパス

注意事項

echo が組み込みになったため、 /etc/rc、 /etc/rc.local、 /etc/net など、起動時に実行されるスクリプトにおいて

echo "..." > /dev/console

という記述は (...) で囲んで、サブシェルで実行するようにしてください。 (...) でくくらないと、 fsck -n などが ^C の割り込みで中断できなくなることがあります。

rsh は、機能の制限されたシェルではなく、リモートシェルが起動します。

バグ

newgrp は実装されていません。

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026