TOP(サイトマップ) Solaris man マニュアル
(はじめに)
はじめに
Solarisって・・・
SunのセミナーとSDC
Solaris 10概要
資格(SCSA,SCNA)
Solarisフォーラム
管理人に連絡

(Solaris基本)

Solarisのインストール
システムの起動と停止
ファイルシステム
オートマウントとマウント
パッケージとパッチ
ユーザの追加と削除
ファイル権限(セキュリティ)
バックアップとリストア
CDE環境
プロセス管理/監視

(ネットワーク管理)

OSIを理解してみる
TCP/IPの設定
(TCP/IP入門)
DNSの設定
NISの設定
NFSの設定(WebNFS,CacheFS)
(NIS、NIS+、DNS違い)
DHCPの設定
1つのNICで複数IP設定

(IO関連)

インタフェース概要
SAFの管理
プリンタ管理概要
プリンタコマンド
SunSolve Online
SCSI情報(KEY,ASC,ASCQ)

(ソフトウェア関連)

Bash
Apache
Solstice DiskSuite
(SDS OSミラー回復)
Veritas VxVM

(OBPについて)

PROM(OBP)の概要
OBPでのキーボード操作
一般的なOBPコマンド
SolarisでOBPの設定
OBPに関するFAQ


(トラブル時の対応)

基本情報
エラーメッセージ
(主要メッセージ一覧)
性能関連コマンド
トレースコマンド
クラッシュダンプ
SunSolve Online

(その他)

小技集
UNIXコマンド
(manマニュアル)
システムチューニング
ネットワークチューニング
UltraSPARC T1について

(FAQ)

rootのPASSが不明
ハングアップかな?
ハードトラブル
OSが起動しない(b)
swap領域の拡張方法

(リンク)

Sun関連リンク
その他リンク
アバウトなJava入門
Perlメモ(逆引き用)
ユーザーコマンド                                            sh(1)

【名前】
     sh, jsh - 標準シェルとジョブ制御シェルおよびコマンドインタプ
     リタ

【形式】
     /usr/bin/sh [-acefhiknprstuvx] [argument ...]

     /usr/xpg4/bin/sh [ _ abCefhikmnoprstuvx] [ _ o  option  ...]
     [-c string] [arg ...]

     /usr/bin/jsh [-acefhiknprstuvx] [argument ...]

【機能説明】
     /usr/bin/sh ユーティリティは、端末またはファイルからコマンド
     を実行するコマンドプログラミング言語です。

     /usr/xpg4/bin/sh ユーティリティは標準に準拠したシェルで す。
     このユーティリティは ksh(1) のすべての機能を提供します。ただ
     し、ksh(1) で説明しているように、動作が異なる場合を 除 き ま
     す。

     jsh ユーティリティは、sh のすべての機能を備えた、かつジョ ブ
     制 御を可能にするシェルへのインタフェースです ( 下記の「ジョ
     ブ制御」を参照 ) 。

     シェルへの引数については、後述の「呼び出し」にリストされてい
     ます。

  [定義]
     ブランク ( blank) はタブ ( tab ) または空白文字 ( space ) で
     す。名前 ( name) は ASCII 英文字、数字、または下線の並びで、
     先頭文字は英文字または下線です。パラメタ ( parameter) は、名
     前、 複数、または *、@、#、?、-、$、! などの文字のいずれかで
     す。

【使用法】
  [コマンド]
     単純コマンド ( simple-command) は、ブランクで区切られた、 ブ
     ランクでないワードの並びです。先頭のワードは、実行すべきコマ
     ンドの名前を指定します。残りのワードは、以下に述べる場合を除
     き、呼び出されたコマンドに引数として渡されます。コマンド名は
     引数 0 として渡されます ( exec(2) を参照 ) 。単純コマンド の
     値 ( value) は、正常終了した場合は終了ステータス、異常終了し
     た場合は 200+status (8 進数 ) です。ステータス値の一覧表につ
     いては、signal.h(3HEAD) を参照してください。

     パイプライン ( pipeline) は、パイプ ( | ) で区切られた 1  つ
     以上のコマンドの並びです。最後のコマンドを除き、各コマンドの
     標準出力は pipe(2) によってその次のコマンドの標準入力と結 合
     さ れ ます。各コマンドは、別々のプロセスとして実行されます。
     シェルは最後のコマンドが終了するのを待ちます。最後のコマンド
     の 終 了ステータスがパイプライン全体の終了ステータスとなりま
     す。

     リスト ( list) は、;、&、&&、または || で区切られた 1 つ以上
     の パイプラインの並びです。その並びの終わりに ;または & を記
     述することもできます。これら 4 つの記号の中で、; と & の優先
     度は同じで、&& と || の優先度より低くなります。&& と || の優
     先度は同じです。セミコロン (;) によって、直前のパイプライ ン
     が順次実行されます。つまりシェルはパイプラインが終了するのを
     待ってから、セミコロンの後のコマンドを実行します。アンパサン
     ド 記号 (&) によって、直前のパイプラインが非同期的に実行され
     ます。つまりシェルはパイプラインが終了するのを待ちません。&&
     と いう記号は、直前のパイプラインの終了ステータスが 0 の場合
     にだけ、後続のリストを実行するものです。反対に (||) は、終了
     ス テータスが 0 以外の場合にだけ、後続のリストを実行します。
     リスト中のコマンドを区切るのに、セミコロンの代わりに任意の数
     の復帰改行 (newline) を指定することもできます。

     コマンド (command) は、単純コマンドまたは以下のいず れ か で
     す。特に断わりのない限り、コマンドが返す値は、そのコマンド中
     で最後に実行された単純コマンドの値です。

     for name [ in word ... ] do list done

         コマンドが実行されるたびに、name は in word リストから次
         に 得 られる word に設定されます。in word ... を省略する
         と、for コマンドは、設定された各定位値パラメタに対して、
         do list を 1 回実行します ( 後述の「パラメタ置換」を参照
         ) 。リストの word がなくなると、実行は終了します。



     case word in [ pattern [ | pattern ] ) list ;; ] ...  esac

         case コマンドは、word に一致する最初の pattern に対応 し
         た list を実行します。パターンの形式は、ファイル名生成に
         使用される形式と同じです (「ファイル名の生成」の項を参照
         ) 。ただしスラッシュ、先行するドット、およびスラッシュ直
         後のドットは、明示的に一致しなくてもかまいません。



     if list ; then list ; [ elif list ; then list ; ] ... [ else
     list ; ]  fi

          if の後の list を実行後、list が 0 の終了ステータスを返
          す と、最初の then の後の list を実行します。それ以外の
          場合、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 を実
                                     行します。それ以外の 場 合、
                                     ルー プは終了します。do list
                                     中のコマンドを実行しな い 場
                                     合、 while コマンドは 0 の終
                                     了ステータスを返します。ルー
                                     プ終了条件の判定を逆にするに
                                     は、while の代わり に  until
                                     を使用します。



     (list)                          サブシェル内の list の実行



     { list;}                        現在の ( つまり、親 ) シェル
                                     内 で の list の実行。記号 {
                                     の後には空白が必要です。



     name () { list;}                name が参照する関数を定義 し
                                     ま す。{ と } の間のコマンド
                                     群 ( list) が関数の本体と な
                                     り ます ( 後述の「関数」参照
                                     ) 。{ の後には空白が必 要 で
                                     す。関数の実行については「実
                                     行」の項で後述します。関数の
                                     本体が、上記の「コマンド」の
                                     項で定義したようなコマンドの
                                     場 合、{ および } は必要では
                                     ありません。



     下記のワードは、コマンドの最初に現れたとき、およびクォートさ
     れずに記述されたときに認識されます。

      if  then  else  elif  fi  case  esac  for  while  until  do
     done  {  }

  [注釈行]
     # でワードを始めると、そのワードおよび以降の復帰改行までの文
     字がすべて無視されます。

  [コマンド行置換]
     シェルは、2 つの逆引用符 (``) で囲まれた文字列からコマンドを
     読み取ります。これらのコマンドからの標準出力は、ワードの一部
     または全体として使用できます。標準出力上で最後につく復帰改行
     は削除されます。

     文字列は、読み取られる前にはいっさい解釈されません。ただし例
     外として、文字のエスケープに使用されるバックスラッシュ(\) の
     削除だけは行われます。バックスラッシュは、逆引用符 (`) ま た
     は別のバックスラッシュ(\) をエスケープするためにも使用され、
     コマンド文字列の読み取り前に削除されます。逆引用符をエスケー
     プすることにより、コマンド置換のネストが可能になります。コマ
     ンド置換が、一対の二重引用符に囲まれている場合 (" ...`  ...`
     ...  ") 、二重引用符をエスケープしているバックスラッシュ(\")
     は削除されますが、それ以外のバックスラッシュはそのまま残され
     ます。

     復帰改行文字のエスケープにバックスラッシュを用い た 場 合 は
     (\newline)、バックスラッシュと復帰改行の両方が削除されます (
     後述の「クォート」の項の後半を参照 )。さらに、ドル記号  (\$)
     をエスケープしているバックスラッシュも削除されます。コマンド
     文字列に対するパラメタの置換は読み取り前には行われないので、
     バックスラッシュでドル記号をエスケープしようとしても無意味で
     す。\、`、"、復帰改行 (newline)、および $ 以外の文字の前に付
     くバックスラッシュは、コマンド文字列の読み取り時にもそのまま
     残ります。

  [パラメタ置換]
     文字 $ は、置換可能なパラメタ ( parameters) を示します。パラ
     メ タには、定位置パラメタとキーワードパラメタの 2 種類があり
     ます。パラメタが数字の場合、これは定位置パラメタです。定位置
     パラメタには、set コマンドによって値を割り当てられます。キー
     ワードパラメタ ( 変数とも呼ばれる ) には、以下の記述により値
     を代入することもできます。

          name=value [ name=value ] ...


     value に対しては、パターンマッチングは行われま せ ん。 同 じ
     name を持つ関数と変数が存在することはできません。

     ${parameter}            パラメタの値 ( もしあれば ) は置換さ
                             れます。中括弧が必要となるのは、パラ
                             メタの後に、その名前の一部として解釈
                             すべきでない文字、数字、または下線を
                             指定するときだけです。parameter が *
                             または @ の場合、$1 で始まる定位値パ
                             ラメタはすべて ( 空白で区切られて  )
                             置換されます。パラメタ $0 は、シェル
                             が呼び出されたときに、引数 0 から 設
                             定されます。



     ${parameter:-word}      parameter が NULL 以外の値に設定され
                             て い る場合、その値に置き換えられま
                             す。その他の場合、word に置き換え ら
                             れます。



     ${parameter:=word}      parameter が設定されていない場合、ま
                             たは NULL に設定されている場合、それ
                             を word に設定します。次に、パラメタ
                             の値を置き換えます。この方法で定位値
                             パラメタに値を代入することはできませ
                             ん。



     ${parameter:?word}      parameter が NULL 以外の値に設定され
                             て い る場合、その値に置き換えられま
                             す。その他の場合、word を出力し シェ
                             ル を終了します。word を省略すると、
                             メッセージ "parameter  null  or  not
                             set" が出力されます。



     ${parameter:+word}      parameter が NULL 以外の値に設定され
                             て い る 場合、word に置き換えられま
                             す。その他の場合は置換を行いません。



     上記にあるように、word は、代入用文字列として使用する場合 に
     だけ評価されます。たとえば次の例では、pwd が実行されるのは、
     d が設定されていないかあるいは NULL に設定されている場合だけ
     です。

          echo ${d:-`pwd`}


     上記の式からコロン (:) を省略すると、シェルは parameter が設
     定されているかどうかだけをチェックします。

     次のパラメタは、シェルが自動的に設定します。

     #               定位置パラメタ数 (10 進数 )



     -               呼び出し時にまたは set コマンドによって シェ
                     ルに与えられたフラグ



     ?               最後に同期実行されたコマンドが返した 10 進数



     $               このシェルのプロセス番号



     !               最後に呼び出されたバックグラウンドコマンドの
                     プロセス番号



     次に挙げるパラメタはシェルが使用するもので、環境変数とも呼ば
     れるものです。

     HOME            cd コマンドのデフォルト引数 ( ホームディレク
                     トリ ) 。login(1) によって、パスワードファイ
                     ルからユーザーのログインディレクトリに設定さ
                     れます ( passwd(4) を参照 ) 。



     PATH            コマンド用検索パス ( 後述の「実行」を参照  )
                     。



     CDPATH          cd コマンドの検索パス



     MAIL            このパラメタにメールファイルの名前がセットさ
                     れていて、かつ MAILPATH パラメタが設定されて
                     いない場合、シェルは指定されたファイルにメー
                     ルが到着するとユーザーに通知します。



     MAILCHECK       このパラメタは、MAILPATH または MAIL パラ メ
                     タで指定されたファイルへメールが到着したか否
                     かを、シェルが何秒ごとにチェックするかを指定
                     し ま す。 デフォルト値は 600 秒 (10 分 ) で
                     す。このパラメタの値として 0 が設定された 場
                     合、シェルは次のプロンプトを出す前にチェック
                     を行います。



     MAILPATH        コロン (:) で区切ったファイル名のリスト。 こ
                     のパラメタが設定されると、指定されたいずれか
                     のファイルにメールが到着するたびに、シェルは
                     ユーザーに通知します。各ファイル名の後には、
                     % および更新時刻の変更時に出力されるメッセー
                     ジを指定することができます。デフォルトのメッ
                     セージは you have mail です。



     PS1             1 次プロンプト文字列。デフォルトは " $ "  で
                     す。



     PS2             2 次プロンプト文字列。デフォルトは " > "  で
                     す。



     IFS             内部フィールドセパレータ。通常は空白文字、タ
                     ブ、および復帰改行です (「ブランクの解釈」を
                     参照 ) 。



     SHACCT          このパラメタにユーザーが書き込み可能なファイ
                     ル名が設定された場合、シェルは、実行された各
                     シェルプロシージャごとのアカウンティン グ レ
                     コードをこのファイルに書き込みます。



     SHELL           シェルは、呼び出されると、このパラメタが示す
                     名 前 が環境中に存在するかを確かめます (「環
                     境」の項を参照 ) 。sh の実行に影響を与える環
                     境変数 LC_CTYPE 、LC_MESSAGES についての詳細
                     は、environ(5) を参照してくださ い。 シェ ル
                     は、PATH、PS1、PS2、MAILCHECK、および IFS に
                     デフォルト値を割り当てます。HOME および MAIL
                     のデフォルト値は login(1) で設定します。



  [ブランクの解釈]
     パラメタとコマンドの置換後、置換の結果内でフィールドセパレー
     タ 文字 (IFS で発見されるもの ) を検索し、その文字が現れた位
     置で分割します。分割された各々が引数となります。 明 示 的 な
     NULL  引数 ("" または '') は保持されます。暗示的な NULL 引数
     ( 値を持たないパラメタにより生ずるもの ) は削除されます。

  [入出力のリダイレクト]
     シェルが解釈する特殊表記法によって、入出力をリダイレクション
     できます。以下は、単純コマンド内の任意の位置およびコマンドの
     前後に指定することができ、起動されたコマンドには引き渡されま
     せ ん。なお word または digit を使用する前にコマンドとパラメ
     タの置換が発生するので注意してください。

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



     >word           word というファイルを標準出力 ( ファイル記述
                     子 1) として使用します。ファイルが存在しない
                     場合は作成します。ファイルが存在していれば、
                     ファイルの長さを 0 にします。



     >>word          word というファイルを標準出力として使用し ま
                     す。ファイルが存在する場合、(EOF  までシーク
                     した後 ) そのファイルに出力を追加 し ま す。
                     ファイルが存在しない場合は、ファイルを作成し
                     ます。



     <>word          word というファイルを標準入力として読み書 き
                     用にオープンします。



     <<[-]word       word に対するパラメタおよびコマンド置換が 行
                     われた後、その結果得られた word と文字どおり
                     一致する最初の行が現れるまで、または EOF  に
                     達するまでシェルへの入力が読み取られます。た
                     だし << に - が付加されて指定された場合 は、
                     以下のようになります。


                         1.  まず、シェルへの入力の読み取り前に (
                             た だ しパラメタとコマンドの置換後 )
                             、先行するタブを word から取り除きま
                             す。


                         2.  読み取ったシェルへの入力 の 各 行 を
                             word  と比較する前に、その行から先行
                             するタブを取り除きます。そして、


                         3.  その結果得られた word と文字どおり一
                             致 す る最初の行が現れるまで、または
                             EOF に達するまでシェルへの入力が読み
                             取られます。


                     word 中のいずれかの文字がクォートされてい る
                     場合 ( 後述の「クォート」を参照 ) 、シェルへ
                     の入力に対して追加処理は行われませ ん。 word
                     中のどの文字もクォートされていない場合は、以
                     下のようになります。


                         1.  まずパラメタとコマンドの置換を実施し
                             ます。


                         2.  エスケープされた復帰改行 (  \newline
                             ) を削除します。


                         3.  文字 \、$、および ` に対しては、\ を
                             使ってクォートしなければなりません。


                     その結果得られるドキュメントが標準入力となり
                     ます。



     <&digit         ファイル記述子 digit に対応するファイルを 標
                     準入力として使用します。同様に、標準出力の使
                     用には >&digit を指定します。



     <&-             標準入力をクローズします。同様に、標準出力に
                     ついては >&- を使用します。



     上記のいずれかの前に数字が付く場合、その値が ( デフォルト の
     0 または 1 の代わりに ) 該当ファイルに対応したファイル記述子
     となります。

     ... 2>&1

     この例では、現在ファイル記述子 1 に関連しているファイル に、
     ファイル記述子 2 を関連付けます。

     リダイレクションを指定する場合、記述する順序が重要にな り ま
     す。シェルは、リダイレクション記述を左から右へ評価します。

     ... 1>xxx 2>&1

     上記の例では、まず xxx というファイルにファイル記述子 1 を関
     連付けます。次に、ファイル記述子 1 に関連するファイル ( つま
     り xxx) に、ファイル記述子 2 を関連付けます。リダイレク ショ
     ン の向きが逆であれば、まずファイル記述子 2 を端末に関連付け
     ( ファイルを記述子 1 が既に端末に関連付けられているとみな し
     ) 、次にファイル記述子 1 をファイル  xxx に関連付けます。

     最初のページの「コマンド」の項で述べた用語を使って説明 す る
     と、以下のようになります。コマンドが複数の単純コマンドで構成
     される場合、リダイレクションは、個々の単純コマンドに対して行
     う前に、コマンド全体に対して評価されます。すなわち、シェルは
     まずリスト全体に対してリダイレクションを評価し、次にリスト内
     の各パイプラインに対して評価し、次にパイプライン内の各コマン
     ドに対して評価し、最後にコマンド内の各単純コマンドに対して評
     価します。

     コマンドの後に & を指定すると、コマンドにおけるデフォルト の
     標 準入力は /dev/null という空ファイルになります。その他の場
     合、コマンドを実行するための環境には、起動側シェルのファイル
     記述子 ( 入出力指定で変更可能 ) が含まれます。

  [ファイル名の生成]
     コマンド実行に先立ち、各コマンドワードは、*、?、および [  を
     含んでいないかチェックされます。これらの文字のいずれかがある
     と、そのワードはパターンとみなされます。このワードは、パター
     ンと一致する、辞書編集方式の順にソートされたファイル名に置換
     されます。パターンと一致するファイル名が見つからない 場 合、
     ワー ドは変更されません。ファイル名の先頭のピリオド (.) また
     はスラッシュ(/) 直後のピリオドは、明示的に一致しなければなり
     ません ( 後者の場合はスラッシュ自体をも含む ) 。

     *        NULL 文字列を含め、任意の文字列と一致します。



     ?        任意の単一文字と一致します。



     [...]    囲まれた文字のいずれかと一致します。2 つの文字を  -
              で 区切ると、その間にある任意の文字 ( その 2 つの文
              字も含む ) に一致します。先頭の [ の次の文字が ! で
              ある場合、で囲まれていない任意の文字と一致します。



     クォートされているすべての文字 ( 下記「クォート」を 参 照  )
     は、ファイル名において明示的に一致しなければなりませんので、
     ご注意ください。

  [クォート]
     次の文字はシェルに対しては特別な意味を持ち、クォートしない (
     後述の説明を参照 ) 限りワードの終わりを表します。

          ;  &  (  )  |  ^  <  >  復帰改行 空白文字 タブ

     これらの文字をクォートする、つまり文字自身を表すには、文字の
     前 に バックスラッシュ(\) を付けるか、または一対の引用符 (''
     または "") で囲みます。シェルは、特定の文字をクォートし て、
     それらが特別の意味を持たないようにすることがあります。単一の
     文字をクォートするのに用いるバックスラッシュは、コマンド実行
     前にワードから取り除かれます。\ と復帰改行との組み合せは、コ
     マンドとパラメタの置換前にワードから取り除かれます。

     一対の単一引用符 ('') で囲まれたすべての文字 ( ただし単一 引
     用 符 は 除く ) は、シェルによってクォートされます。バックス
     ラッシュは、一対の単一引用符で囲まれていれば特殊な意味を持ち
     ません。単一引用符は、一対の二重引用符で囲めばクォートされま
     すが ( 例  "'" ) 、一対の単一引用符で囲んでもクォートされ ま
     せん。

     一対の二重引用符 ("") の中では、パラメタとコマンドの置換が実
     施 さ れ、シェルは、その結果をクォートして、ブランクの解釈と
     ファイル名の生成が行われないようにします。$* が一組の二重 引
     用符で囲まれている場合、定位置パラメタは置換され、クォートさ
     れ、クォートされた空白で分けられます ("$1 $2 ...") 。しか し
     $@  が一組の二重引用符で囲まれている場合は、定位置パラメタは
     置換され、クォートされ、クォートされていない空白 ("$1"  "$2"
     ... ) で分けられます。\ は \、`、"、, (コンマ)、$ といった文
     字をクォートします。\ と復帰改行との組み合せは、コマンドとパ
     ラメタの置換前にワードから取り除かれます。バックスラッシュが
     \、`、"、, (コンマ)、$、および復帰改行以外の文字の前に付く場
     合は、バックスラッシュ自体がシェルによってクォートされます。

  [プロンプト]
     シェルは、対話的に使用すると、コマンドを読み取る前に PS1  の
     値によるプロンプトを発行します。復帰改行を入力したあとで、コ
     マンドを完了するためにさらに入力が必要な場合は、2 次プロンプ
     ト (PS2 の値 ) が出力されます。

  [環境]
     環境 ( environment) は、通常の引数リストが実行されるプログラ
     ムに引き渡される場合と同様の方法で引き渡される、名前と値の対
     の集まりです ( environ(5) を参照 ) 。シェルが環境と対話す る
     方法はいくつかあります。シェルは、呼び出されると、環境を走査
     して、見つけた名前ごとに変数を作成し、対応する値を設定 し ま
     す。ユーザーがこれらのパラメタの値を変更したり新しいパラメタ
     を作成したときには、export コマンドを用いてシェルのパラメ タ
     を環境に関連付けなければ、これらのパラメタは環境に何の影響も
     与えません ( set -a の説明を参照 ) 。環境からパラメタを削 除
     するには、unset コマンドを使用します。したがって、実行される
     コマンドが参照する環境は、シェルが最初に引き継いだ「名 前  =
     値」の対のうち変更されていないものから、unset によって削除さ
     れた対を引き、変更または追加した対をくわえたものです。これら
     はいずれも export コマンドで指定する必要があります。

     単純コマンドの環境は、いくつかのパラメタ代入指定を先頭に付加
     すれば拡張できます。

     以下は、command が特殊コマンドでなければ、command の実行に関
     するかぎり同じことを意味します。

     TERM=450  command

     および

     (export TERM; TERM=450;   command

     command が特殊コマンドの場合、次の指定は、現在のシェル 内 の
     TERM 変数を修正します。

     TERM=450   command

     -k フラグを設定すると、すべてのキーワード引数は環境に格納 さ
     れます。これらの引数がコマンド名の後に指定された場合も同様で
     す。以下の例では、まず a=b c を、次に c を表示します。

     echo a=b  c

     a=b  c

     set  -k

     echo a=b  c

     c

  [シグナル]
     起動されたコマンドに対する INTERRUPT シグナルと QUIT シグ ナ
     ル は、コマンドの後に & が付く場合には無視されます。その他の
     場合、シグナルは、シェルが親から引き継いだ値を持ちます。ただ
     し、 シグナル 11 だけは例外です ( 後述の trap コマンドの説明
     を参照 ) 。

  [実行]
     コマンド実行のたびに、前述のコマンドの置換、パラメタの置換、
     ブランクの解釈、入出力のリダイレクション、およびファイル名の
     生成が行われます。コマンド名が定義済みの関数名と一致す る 場
     合、 その関数がシェルプロセスで実行されます ( これと実行時に
     サブシェルを要求するシェルスクリプトファイルの実行の違いに注
     意  ) 。定義済み関数名とは一致しないが、後述の特殊コマンドの
     いずれかと一致するコマンド名の場合、そのコマンドがシェルプロ
     セスで実行されます。

     定位置パラメタの $1、$2、... は関数の引数に設定されます。 コ
     マンド名が特殊コマンドとも定義済み関数の名前とも一致しない場
     合、新しいプロセスが作成され、exec(2) を用いてそのコマンドの
     実行が試みられます。

     PATH というシェルパラメタは、コマンドを含んでいるディレク ト
     リの検索パスを定義します。2 つのディレクトリ名は、コロン (:)
     で区切ります。デフォルトのパスは /usr/bin です。現在のディレ
     クトリは NULL パス名によって指定されます。これは等号の直後、
     パスリスト内の任意の場所にある 2 つの区切り文字のコ ロ ン の
     間、 またはパスリストの最後に記述できます。コマンド名に / が
     含まれている場合は、検索パスは使用されません。/ が含まれてい
     なければ、パスにおける各ディレクトリに実行可能ファイルがある
     か検索します。ファイルが実行権を有するが、それが a.out  ファ
     イ ル でない場合、シェルコマンドの入ったファイルとみなされま
     す。そのファイルを読み取るときは、サブシェルが生成されます。
     括弧で囲まれたコマンドもサブシェル内で実行されます。

     シェルは、( あとで不必要な exec を行わなくてもいいよう に  )
     検索パス内のコマンドの位置を記憶します。コマンドが相対ディレ
     クトリにあった場合、その位置を現在のディレクトリの変更のたび
     に 再決定しなければなりません。シェルは、PATH 変数が変更され
     るか hash -r コマンドが実行されるたびに、記憶していたすべ て
     の位置を忘れてしまいます ( 下記参照 ) 。

  [特殊コマンド]
     以下に示す特殊コマンドに対しては、入出力のリダイレクションが
     可 能 で す。ファイル記述子 1 は、デフォルトの出力位置です。
     ジョブ制御が可能なときには、さらにいくつかの特殊コマン ド が
     シェル環境に追加されます (「ジョブ制御」の項を参照 ) 。

     :

         コマンドは何もせず、実行による影響は何もありません。終了
         ステータス 0 が返されます。



     . filename

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



     bg [%jobid ...]

         ジョブ制御が可能なとき、bg コマンドはジョブの操 作 用 に
         ユーザー環境に追加されます。停止状態のジョブをバックグラ
         ウンドで再び実行します。%jobid を省略すると、現在の ジョ
         ブとみなされます。( 詳細については後述の「ジョブ制御」の
         項を参照 )



     break [ n ]

         for または while ループがあれば抜け出します。n を指定 す
         ると、n レベル分ブレークします。



     cd [ argument ]

         現在のディレクトリを argument に変更します。シェルパラメ
         タ  HOME は、argument のデフォルト値です。シェルパラメタ
         CDPATH は、argument を含むディレクトリの検索パスを定義し
         ま す。2 つのディレクトリ名は、コロン (:) で区切ります。
         デフォルトのパスは空の文字列です ( 現在のディレクトリ の
         指 定  )  。なお現在のディレクトリは空のパス名で指定しま
         す。このパス名は、等号の直後か、パスリスト内の区切り文字
         の コ ロンの間に指定します。argument の先頭文字が / の場
         合、検索パスは使用しません。それ以外の場合は、パス中の各
         ディレクトリで argument を検索します。



     chdir [ dir ]

         chdir はシェルの作業用ディレクトリを dir が示すディレ ク
         トリに変更します。引数を指定しないと、そのユーザーのホー
         ムディレクトリに変更します。dir が現在のディレクトリから
         は見つからない相対パス名の場合、変数 CDPATH 環境内のディ
         レクトリリストを検索します。dir が / で始まる値 を 持 つ
         シェル変数の名前である場合、その変数の値が示すディレクト
         リに変更します。



     continue [ n ]

         for または while ループの次の繰り返しを実行します。n  を
         指定すると、n 番目のループから実行します。



     echo [ arguments ... ]

         arguments の文字列が空白文字に区切られて、シェルの標準出
         力に書かれます。引数をエコーバックします。使用法と説明に
         ついては echo(1) を参照してください。



     eval [ argument ... ]

         引数をシェルへの入力として読み取り、生成されるコマンドを
         実行します。



     exec [ argument ... ]

         このシェルの代わりに、引数で指定されたコマンドを ( 新 規
         プ ロセスは生成せずに ) 実行します。入出力引数が指定可能
         で、その他の引数が指定されない場合は、これによってシェル
         の入出力が変更されます。



     exit [ n ]

         呼び出し元のシェルまたはシェルスクリプトを n で指定し た
         終了ステータスで終了させます。n を省略すると、最後に実行
         されたコマンドの終了ステータスがシェルの終了ステータスに
         なります。EOF によっても、シェルは終了します。



     export [ name ... ]

         指定された name 群に対し、後で実行されるコマンドの環境へ
         自動的にエクスポートされるようにマークを付けます。引数を
         省略すると、現在のシェル実行中にエクスポートのマークが付
         けられた変数名を一覧表示します。親シェルからエクスポート
         された変数名は、現在のシェル実行中に再びエクスポートされ
         た場合にだけ一覧表示されます。関数名はエクスポートされま
         せん。



     fg [%jobid ...]

         ジョブ制御が可能なとき、fg はジョブの操作用にユーザー 環
         境に追加されます。このコマンドは、フォアグラウンド状態の
         停止ジョブを再び実行します。また、実行中のバックグラウン
         ド ジョブをフォアグラウンドへ移します。%jobid を省略する
         と、現在のジョブとみなされます。( 詳細については後 述 の
         「ジョブ制御」の項を参照 )



     getopts

         コマンドシンタクス標準のサポート用に、シェルスクリプト内
         で 使用されるコマンドです ( intro(1) を参照 ) 。このコマ
         ンドは、定位置パラメタを構文解析し、オプションの正当性を
         チェッ クします。使用法と説明については、getoptcvt(1) を
         参照してください。



     hash [ -r ] [ name ... ]

         シェルは、各 name ごとに、それが示すコマンドの検索パス内
         の 位置を決定し、記憶します。-r オプションを指定すると、
         シェルは記憶したすべての位置を忘れます。引数をまったく指
         定 し ないと、記憶されたコマンドに関する情報が表示されま
         す。この出力表示において、hits はシェルプロセスによっ て
         コ マンドが呼び出された回数を表します。cost は、検索パス
         のコマンドを見つけるのに必要な作業です。コマンドが検索パ
         スの「相対」ディレクトリにある場合、そのディレクトリの変
         更後にそのコマンドが格納された位置が再計算されます。この
         再 計算が行われる予定のコマンドに対しては、hits 情報の隣
         にアスタリスク (*) が示されます。cost の値は、再計算が行
         われるたびに増加されます。



         jobs [-p|-l] [%jobid ...]



     jobs -x command [arguments]

         停止中またはバックグラウンドで実行中のすべてのジョブを報
         告 します。%jobid を省略すると、停止中またはバックグラウ
         ンドで稼動中のすべてのジョブが報告されます ( 詳細につ い
         ては後述の「ジョブ制御」の項を参照 ) 。





         kill [ -sig ] %job ...



     kill -l

         TERM ( 終了 ) シグナルまたは指定されたシグナルのいずれか
         を、指定されたジョブまたはプロセスに送信します。シグナル
         は、番号または名前 ( signal.h(3HEAD) に示されるもの で、
         た だし「SIG」という接頭辞を取り除いたもの ( CHLD と名付
         けられる SIGCHD 以外 )) で指定します。送信するシグナルが
         TERM ( 終了 ) または HUP ( ハングアップ ) の場合、停止中
         のジョブまたはプロセスには CONT ( 継続 ) シグナルを送 信
         します。job という引数は、活動中のジョブではないプロセス
         のプロセス ID を指定することもできます。後述の「ジョブ制
         御」の項を参照してください。第 2 の形式の kill -l は、シ
         グナル番号とシグナル名をリスト表示します。( kill(1) 参照
         )


     login [ argument ... ]

         `exec login argument....' と同機能です。使用法と説明につ
         いては、login(1) を参照してください。



     newgrp [ argument ]

         exec newgrp argument. と同機能です。使用法と説明について
         は、newgrp(1) を参照してください。



     pwd

         現在の作業用ディレクトリを表示します。使用法と機能説明に
         ついては、pwd(1) を参照してください。



     read name ...

         標準入力から 1 行を読み取り、内部フィールドセパレータ の
         IFS  ( 通常は空白文字またはタブ ) を用いてワード境界を区
         切り、最初のワードを最初の name に割り当て、2 番目のワー
         ド を 2 番目の name に割り当て、続くワードも順次割り当て
         ます。残ったワードは最後の name に割り当てます。\  に 続
         いて復帰改行を入力すれば、行を継続できます。復帰改行以外
         の文字の前にバックスラッシュを付加すれば、そ の 文 字 を
         クォー トできます。このバックスラッシュは、ワードが name
         に割り当てられる前に削除され、バックスラッシュの後に位置
         す る 文字は解釈されません。EOF に到達した場合を除き、リ
         ターンコードは 0 となります。



     readonly [ name ... ]

         指定された name に読み取り専用のマークを付け、これらの名
         前が後続の割り当てでは変更できないようにします。引数を省
         略すると、読み取り専用と指定された名前がすべて一覧表示さ
         れます。



     return [ n ]

         関数を、n が示すリターンステータスで終了させます。n を省
         略すると、リターンステータスは最後に実行されたコマンドの
         リターンステータスになります。


     set [ --aefhkntuvx [ argument ... ] ]


         -a       エクスポート用に修正または作成された変数に マー
                  クを付けます。




         -e       コマンドが 0 以外の終了ステータスで終了し た 場
                  合、直ちに終了します。



         -f       ファイル名を生成しないようにします。



         -h       関数の定義時に、関数コマンドを検索しその位置 を
                  記憶します ( 通常、関数コマンドは関数実行時に検
                  索されます ) 。



         -k       コマンド名の前にあるキーワード引数だけでな く、
                  す べてのキーワード引数がコマンド用の環境に置か
                  れます。



         -n       コマンドを読み取るが、実行しません。



         -t       1 つのコマンドを読み取り、実行し、終了します。



         -u       未設定の変数を置換時にエラーとして扱います。



         -v       シェルへの入力行の読み取り時に、その内容を表 示
                  出力します。



         -x       コマンドおよび引数の実行時に、その内容を表示 出
                  力します。



         -        どのフラグも変更しません。$1 に - を設定する 際
                  に便利です。



         - の代わりに + を使用すると、これらのフラグがオフにな り
         ます。これらのフラグはシェル起動時にも使用できます。現在
         セットされているフラグは、$- で見つけられます。残りの 引
         数 は 定位置パラメタで、$1、$2、... へ順に割り当てられま
         す。引数が指定されない場合、すべての名前の値が出力されま
         す。


     shift [ n ]

         $n+1 ... から始まる一連の定位置パラメタを $1 ... に再 命
         名 (リネーム) します。n を省略すると、1 とみなされます。



     stop pid ...

         pid ( プロセス ID 番号 ) の実行を停止します ( ps(1) 参照
         ) 。



     suspend

         現在実行中のシェルを停止します。( ログインシェルの場合は
         停止しません。)



     test

         条件式を評価します。使用法と説明については、test(1) を参
         照してください。



     times

         シェルから実行されたプロセスのユーザーおよびシステム時間
         の累積値を出力します。



     trap [ argument n [ n2 ... ]]

         argument が示すコマンドを、シェルが数値または記号シグ ナ
         ル  (n)  を受信した時に読み取り実行します。なお argument
         は、トラップ設定時に一度、トラップ取り出し時に一度検索さ
         れます。トラップコマンドは、シグナル番号または対応するシ
         ンボリック名の順序で実行されます。現在のシェルで無視され
         ているシグナルにトラップを設定しようとしても無効となりま
         す。シグナル 11 ( メモリフォールト ) にトラップを指定 し
         よ うとすると、エラーになります。argument を省略すると、
         すべてのトラップ n は元の値に再設定されます。argument が
         NULL  文字列の場合、シェルおよびシェルが呼び出したコマン
         ドは、このシグナルを無視します。n が 0 の場合、 argument
         が 示 すコマンドはシェル終了時に実行されます。引数なしの
         trap コマンドは、コマンドの一覧を各々が対応しているシ グ
         ナル番号とともに表示します。



     type [ name ... ]

         各 name ごとに、コマンド名として使用される場合にどのよう
         に解釈されるかを指示します。



     ulimit [ -[HS][a | cdfnstv] ]




     ulimit [ -[HS][c | d | f | n | s | t | v] ] limit

         ulimit は、資源の強い制限値または弱い制限値を表示また は
         設定します。これらの限界については getrlimit(2) の説明を
         参照してください。

         limit 引数を省略すると、ulimit は指定されている限界値 を
         表 示します。限界値は一度にいくつでも表示できます。-a オ
         プションは限界値すべてを表示します。

         limit 引数を指定すると、ulimit は指定されたフラグに対 応
         する限界値をその引数の値に設定します。limit 引数の値とし
         て unlimited という文字列を指定すると、有効な最大値に 設
         定 されます。一度に資源 1 つについてだけ限界値を設定でき
         ます。ユーザーは誰でも、弱い限界値を強い限界値を超えない
         任意の値に設定できます。ユーザーは誰でも、強い限界値を下
         げることができます。強い限界値を上げることができる の は
         スーパーユーザーだけです。詳しくは su(1M) を参照してくだ
         さい。

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

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


         -c       最大 core ファイルサイズ (512 バイトブロック 単
                  位 )




         -d       データセグメントまたはヒープの最大サイズ (K  バ
                  イト単位 )



         -f       最大ファイルサイズ (512 バイトブロック単位 )



         -n       最大ファイル記述子プラス 1



         -s       スタックセグメントの最大サイズ (K バイト単位 )



         -t       最大 CPU 時間 ( 秒単位 )



         -v       仮想メモリの最大サイズ (K バイト単位 )


         システムで利用可能な最大上限値を調べるには sysdef(1M) コ
         マンドを実行してください。表示される値は 16 進数ですが、
         bc(1) ユーティリティを使って 10 進数に変換 で き ま す。
         swap(1M) を参照してください。

         たとえば、0 メガバイトにコアファイルダンプのサイズを制限
         するには次のように入力します。



         ulimit -c 0


     umask [ nnn ]

         ユーザーファイル作成マスクを nnn が示す値に設定します  (
         umask(1) を参照 ) 。nnn を省略すると、マスクの現在の値を
         出力します。



     unset [ name ... ]

         name ごとに、対応する変数または関数値を削除します。変 数
         PATH、PS1、PS2、MAILCHECK、および IFS は設定解除できませ
         ん。



     wait [ n ]

         当該ユーザーのバックグラウンドプロセスのうち ID が n  の
         プロセスを待ち、その終了ステータスを報告します。n が省略
         された場合、当該ユーザーの現在活動中のすべてのバックグラ
         ウンドプロセスを待ち、リターンコードは 0 になります。



  [呼び出し]
     exec(2) を介してシェルが呼び出される場合で、引数 0 の先頭 文
     字 が  -  のとき、コマンドは、まず /etc/profile から読み込ま
     れ、次に $HOME/.profile から読み込まれます ( これらのファ イ
     ル がある場合 ) 。その後、コマンドは後述のように読み込まれま
     す。シェルが /usr/bin/sh として呼び出される場合にも、この よ
     うになります。以下に述べるフラグは、呼び出し時にのみ、シェル
     によって解釈されます。なお -c または -s フラグが指定されない
     かぎり、先頭引数はコマンドを含むファイルの名前であるとみなさ
     れ、残りの引数は定位置パラメタとしてそのコマンドファイルに引
     き渡されます。

     -c string       このフラグが指定されると、string からコマ ン
                     ドを読み取ります。



     -i              このフラグが指定された場合あるいはシェル入出
                     力が端末に接続されている場合、このシェルは対
                     話型となります。この場合、kill 0 が 対 話 型
                     シェルを終了しないように TERM を無視し、wait
                     が割り込み可能になるように  INTERRUPT  を 捕
                     え、 無 視 し ます。いずれの場合も、シェルは
                     QUIT を無視します。



     -p              このフラグが指定されると、シェルは実 効 ユー
                     ザーおよびグループ ID に、実ユーザーおよびグ
                     ループ ID を設定しません。



     -r              このフラグを指定すると、シェルは制限付きシェ
                     ルになります ( rsh(1M) を参照 ) 。



     -s              このフラグが指定された場合または引数が残って
                     いない場合、標準入力からコマンドを読み取りま
                     す。引数が残っていれば、それらは定位置パラメ
                     タを指定します。前述の特殊コマンドの出力を除
                     くシェル出力は、ファイル記述子 2 に書き出 さ
                     れます。



     他のフラグと引数については、前述の set コマンドの箇所で説 明
     されています。

  [ジョブ制御 (jsh)]
     シェルを jsh として呼び出すと、sh の説明で述べたすべての機能
     に加えて、ジョブ制御が可能になります。通常、ジョブ制御は対話
     型シェルに対してだけ可能です。非対話型シェルは、ジョブ制御の
     機能が追加されても、その恩恵を受けないのが通常です。

     ジョブ制御が可能な場合、ユーザーが端末から入力したコマンドま
     た は パイプラインは、すべてジョブ ( job) と呼ばれます。どの
     ジョブも、必ずフォアグラウンド、バックグラウンド、または停止
     の い ずれかの状態にあります。これらの用語の定義を次に示しま
     す。

     1.  フォアグラウンド状態にあるジョブは、制御している端末への
         読み取りおよび書き込み権を持っています。


     2.  バックグラウンド状態にあるジョブは、制御している端末への
         読み取り権を拒否されていますが、条件付き書き込み権は持っ
         ています ( stty(1) を参照 ) 。


     3.  停止ジョブは保留状態に置かれたジョブ で あ り、 通 常 は
         SIGTSTP  シ グ ナ ル に よ り、 こ の 状 態 になります (
         signal.h(3HEAD) を参照 ) 。


     シェルが起動するすべてのジョブには、ジョブ番号 ( job number)
     と呼ばれる正の整数が割り当てられます。シェルはこの番号を把握
     し、特定のジョブを示す識別子として使用します。また、シェルは
     現 在 ( current) および直前 ( previous) のジョブも把握してい
     ます。現在のジョブとは、最後に起動または再起動されたジョブで
     す。前回のジョブとは、その直前のジョブです。

     ジョブ識別子の正しい構文は次のような形式です。

          %jobid


     このうち jobid は、次のいずれかの形式で指定できます。



     %               または + 現在のジョブ



     -               前回のジョブ



     ?<string>       コマンド行が string を含んでいるジョブ



     n               ジョブ番号が n のジョブ



     pref            コマンド名の先頭が pref のコマンド。たとえば
                     ls  -l name がバックグラウンドで実行中だった
                     場合、%ls と指定すればこのコマンドを示すこと
                     が できます。pref は、クォートしない限り、ブ
                     ランクを含めることができません。



     ジョブ制御が可能なとき、ジョブの操作用に次のコマンド が ユー
     ザー環境に追加されます。

     bg [%jobid ...]

         停止状態のジョブをバックグラウンドで再び実 行 し ま す。
         %jobid を省略すると、現在のジョブとみなされます。



     fg [%jobid ...]

         停止状態のジョブをフォアグラウンドで再び実行しま す。 ま
         た、実行中のバックグラウンドジョブをフォアグラウンドへ移
         します。%jobid を省略すると、現在のジョブとみな さ れ ま
         す。



     jobs [-p|-l] [%jobid ...]




     jobs -x command [arguments]

         停止中またはバックグラウンドで実行中のすべてのジョブを報
         告 します。%jobid を省略すると、停止中またはバックグラウ
         ンドで稼動中のすべてのジョブが報告されます。次のオプショ
         ンを使って、ジョブの出力を変更できます。

         -l       ジョブのプロセスグループ ID および作業ディレ ク
                  トリを報告します。




         -p       ジョブのプロセスグループ ID のみを報告します。



         -x       コマンドまたは引数中に見つかった jobid を、対応
                  す るプロセスグループ ID に置き換え、コマンドに
                  引数を渡して実行します。




     kill [ -signal ] %jobid

         kill コマンドの組み込みバージョン。jobid で示すプロセ ス
         に対して kill コマンドの機能を提供します。



     stop %jobid ...

         バックグラウンドジョブの実行を停止します。



     suspend

         現在のシェルの実行を停止します ( ただし、ログインシェ ル
         の場合は停止しません ) 。



     wait [%jobid ...]

         wait コマンドの組み込みバージョンで、ジョブ識別子の指 定
         を受け入れます。%jobid が省略された場合、wait は、前述の
         「特殊コマンド」で説明したように動作します。



  [大規模ファイルの動作]
     ファイルが 2 ギガバイト ( 2**31 バイト) 以上ある場合の sh と
     jsh の動作については、largefile(5) を参照してください。


【終了ステータス】
     構文エラーなどのエラーを検出すると、シェルは 0 以外の終了 ス
     テータスを返します。シェルを非対話型で使用している場合、シェ
     ルファイルの実行は中止されます。対話型で使用している場合は、
     シェルは最後に実行されたコマンドの終了ステータスを返します (
     上記の exit コマンドの説明を参照 ) 。

  [jsh のみ]
     シェルが jsh として呼び出された場合、停止ジョブがあ る の に
     シェルを終了させようとすると、シェルは次のような警告を出しま
     す。

          There are stopped jobs.


     これが唯一のメッセージです。もう一度終了が試みられ、停止ジョ
     ブ が ま だ 存 在 している場合、これらのジョブにカーネルから
     SIGHUP シグナルが送られ、シェルは終了します。

【ファイル】
     $HOME/.profile


     /dev/null


     /etc/profile


     /tmp/sh*


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

  [/usr/bin/sh]
  [/usr/bin/jsh]
     ____________________________________________________________
    |         属性タイプ          |            属性値           |
    | 使用条件                    | SUNWcsu                     |
    | CSI                         | 対応済み                    |
    |_____________________________|_____________________________|

  [/usr/xpg4/bin/sh]
     ____________________________________________________________
    |         属性タイプ          |            属性値           |
    | 使用条件                    | SUNWxcu4                    |
    | CSI                         | 対応済み                    |
    |_____________________________|_____________________________|

【関連項目】
     intro(1), bc(1),  echo(1),  getoptcvt(1),  kill(1),  ksh(1),
     login(1),  newgrp(1),  pfsh(1),  pfexec(1),  ps(1),  pwd(1),
     set(1),  shell_builtins(1),  stty(1),   test(1),   umask(1),
     wait(1),  rsh(1M),  su(1M),  swap(1M),  sysdef(1M),  dup(2),
     exec(2),   fork(2),   getrlimit(2),   pipe(2),    ulimit(2),
     setlocale(3C),   signal.h(3HEAD),   passwd(4),   profile(4),
     attributes(5), environ(5), largefile(5), XPG4(5)

【警告】
     シェルスクリプトを setuid して使用することは避けてください。

【注意事項】
     入出力のリダイレクションでファイル名に使用されたワー ド は、
     ファ イ ル 名生成では解釈されません ( 上記の「ファイル名の生
     成」の項を参照 ) 。たとえば cat file1 >a* という指定 は、 a*
     という名前のファイルを生成します。

     パイプラインにあるコマンド群はそれぞれ別個のプロセスとして稼
     動するので、パイプラインに設定された変数は親シェルには何の影
     響も与えません。

     while ループまたは until ループの入力または出力をリダイレ ク
     トする場合、ループ内のコマンドはサブシェルで実行されます。サ
     ブシェル内で設定または変更された変数は、親プロセスでは効力を
     失います。

        lastline=
        while read line
        do

                lastline=$line
        done < /etc/passwd
        echo "lastline=$lastline"       # lastline は空です。

     このような場合、入力または出力をリダイレクトするには、次の例
     のように exec を使用します。

        # ファイル記述子 0 の標準入力をファイル記述子 3
        # のファイルとして保存して、
        # そのファイルから標準入力をリダイレクトします。
        /etc/passwd:

        exec 3<&0               # fd 0 の標準入力を fd 3 として保存します。
        exec </etc/passwd       # ファイルから入力をリダイレクトします。
        lastline=
        while read line
        do
                lastline=$line
        done

        exec 0<&3               # 標準入力を元に戻します。
        exec 3<&-               # fd 3 を閉じます。
        echo "$lastline"        # lastline は空ではありません。

     cannot fork,too many processes というエラーメッセージを受 け
     取った場合には、wait(1) コマンドを用いてユーザーのバックグラ
     ウンドプロセスをクリーンアップしてください。それでも効果がな
     い 場 合には、おそらくシステム・プロセステーブルが満杯である
     か、または活動中のフォアグラウンドプロセスがありすぎるためで
     す。ユーザーログインに結合するプロセス ID の数、およびシステ
     ムが把握できる数には限度があります。

     パイプラインの最後のプロセスだけが、待つ対象になり得ます。

     あるコマンドを実行し、その後で同一名のコマンドが、検索パスに
     おいて元のコマンドがあるディレクトリの前に位置するディレクト
     リにインストールされた場合、シェルは元のコマンドの方を実行し
     続 けます。新しい方のコマンドを実行させたければ、hash コマン
     ドを使用してください。

     Bourne  シェルにはプロセスの実効ユーザーID  に対して制限があ
     り ます。このユーザーID  が 100 よりも小さい (さらにプロセス
     の実ユーザーID と同等ではない ) 場合には、ユーザーID  はプロ
     セスの実ユーザーID にリセットされます。

     同じプロセスグループでフォアグラウンドジョブとバックグラウン
     ドジョブの両方をシェルが実行しているため、ジョブは同じシグナ
     ルを受け取り、予期しない結果を招くことがあります。し た がっ
     て、特に対話型のシェルを動作している場合は、他のジョブ制御の
     シェルを使用することをおすすめします。

     存在しないコマンドのインタプリタを実行しようとするシェルスク
     リプトを、シェルが処理した場合、シェルはシェルスクリプトが存
     在しないという間違った診断メッセージを返します。