7. その他  

前節までで述べることができなかった機能はまだまだ山ほどあるが, ここでは それらの中でも比較的利用頻度が高い と考えられるものについて紹介しておく.
 
<-- 「6. コマンドラインオプションと定義済み変数」へ戻る 目次へ戻る  


7.1 echo

7.2 eval

7.3 umask

7.4 ulimit


7.1 echo

echo は単にその引数を標準出力へ書き出すものであるが, そこにエスケープシーケンスを用いる場合について捕捉しておく.

echo はバックスラッシュで始まるエスケープシーケンスを受け付けることができる:

echo エスケープシーケンス
 シーケンス  書き出される記号
 \a  ALERT あるいは CTRL-G(ベル)
 \b  BACKSPACE あるいは CTRL-H
 \c  最期の NEWLINE の省略
 \f  FORMFEED あるいは CTRL-L
 \n  NEWLINE(コマンドの終りではなく) あるいは CTRL-J
 \r  RETURN(ENTER) あるいは CTRL-M
 \t  TAB あるいは CTRL-I
 \v  VERTICAL  TAB あるいは CTRL-K
 \0n  8 進数 n の ASCII 文字.n は 3 桁まで
 \\  バックスラッシュ 1 つ

これらのエスケープシーケンスを実際に echo で書き出すには

echo  -e "\a"
という具合いに -e オプションを付け, ダブルクォーテーションで囲む. (この場合はベル(ビープ音)が鳴る)

7.2 eval

いま,次のスクリプトを考える:
aaa="ls | more"
$aaa
言うまでもなく,変数 aaa には "ls | more" という文字列が設定される. そこで $aaa としてこれを実行しようとしている. しかしながら,この結果は
ls: |: No such file or directory
ls: more: No such file or directory
となる. これは |  と more  を ls の引数として処理しようとしたためである. つまり,| をコマンドのパイプとして処理していない. このように文字列をコマンドとして実行する場合は eval コマンドを利用する.
aaa="ls | more"
eval $aaa

7.3 umask

ユーザがファイルを新規作成した際の ファイルパーミッションを設定するコマンドである.
これには 8 進 3 桁の数値を引数として渡す. ただし,その値は chmod で利用するものとは違いがある.
例えば,umask で 022 という値をマスクとして設定すると, その否定と 666 との論理積 ファイルのパーミッションになる.(666 というのは固定)
     666 = 110 110 110
not 022 = 111 101 101
-------------------
AND)       110 100 100  =  644        <--- デフォルトのパーミッション 644
なお,ディレクトリのパーミッションについては umask 値の 否定と 777 との論理積 になる.

7.4 ulimit

ユーザに対するいろいろな制限を設定するためのコマンドである. 現在の設定を確認するには -a オプションを付けて実行する:
$ ulimit -a
core file size (blocks)          1000000
data seg size (kbytes)          unlimited
file size (blocks)                  unlimited
max memory size (kbytes)    unlimited
stack size (kbytes)              8192
cpu time (seconds)             unlimited
max user processes            256
pipe size (512 bytes)           8
open files                          256
virtual memory (kbytes)       2105343
これらを設定するためそれぞれに対応したオプションが用意されている:
 オプション  リソースの制限
 -a   全ての制限を表示
 -c  core ファイルのサイズ (1Kバイトブロック)
 -d  プロセスのデータセグメント(Kバイト)
 -f  ファイルサイズ(1Kバイトブロック)
 -m  プロセスのために確保される最大の実メモリサイズ
 -n  ファイルディスクリプタ
 -p  パイプサイズ(512バイトブロック)
 -s  プロセスのスタックセグメント(Kバイト)
 -t  プロセスの CPU タイム(秒)
 -u  ユーザが利用できる最大プロセス数
 -v  仮想メモリ(Kバイト)
例えば,core ファイルの大きさを 0 Kバイトに制限したい場合は
$ ulimit  -c  0
とする. 逆に制限を設けない場合は unlimited を数字の代わりに用いる.