シェルとは、オペレーティングシステムとユーザーとのインターフェースを提供するソフトウェアである。 エスペラントでは、英語からのなりゆきで ŝelo としたり、 意味をくんで terminalo (端末道具)と言ったりする。
Unix だけでも、多くのシェルがある。
私は対話的なシェルは csh から入っていき、そして tcsh にした。 しかしその後は対話的な環境でも bash である。 一方で、バッチ処理のためのシェルは sh を、そして sh の文法内での bash を使い続けている。 大多数の Unix ユーザがそうだったと勝手に思っている。
sh や bash の場合、標準出力と標準エラー出力と合わせてファイル output.txt に落とすには次のようにする。
% command >output.txt 2>&1
これを
% command 2>&1 > output.txt
と順番を逆にするのは誤り。
以上は、sh や bash の場合である。csh や tcsh ではこうはいかない。 tcsh で上記を試して Ambiguous output redirect (リダイレクト出力があいまいです) というメッセージが出てきて恥ずかしかった。
ssh はシェルの一種であろうが、毛色が違う。secure な shell ということである。
bash のプロンプトを変更したいと思った。下記が役に立った。
bash のプロンプトを変更するには
(www.atmarkit.co.jp) 参照。
環境変数 FOO の内容を参照するには $ set FOO とする。 環境変数を省くと環境変数すべてを表示する。
環境変数 FOO を削除するのは unset を使う。
$ unset FOO
次のようなシェルスクリプトを書いたとき:
#!/bin/sh # shtest echo $0 echo $1 echo $2
コマンドとその応答は次のようになる。
$ ./shtest foo bar ./shtest foo bar
直前に実行したコマンドは !! で実行できる。
直前に実行したコマンドの引数は !$ で参照できる。
直前のコマンドや引数を置換するには ^before^after を使う。