<7>
Unix(のCUI)を構成する小さなツール群echo コマンド
echo a b c
=> a b c
パラメータとして渡した文字列を そのまま標準出力に印字する
標準入力は使わない
この科目の資料の黒枠のリスト部分で、Unix/Linux のコマンドを入力する例を示した箇所(上の例では echo コマンド)では、 左端の ‘$’ はプロンプトを表す文字なので、
実際に試してみる際にはそれよりも右にある文字を入力すること。
cat コマンド
cat
<- ここで端末から(つまり標準入力から)
何行かのデータを入力
=> # 即時に画面にも印字される
Ctrl-D # 入力終了
catコマンドの最も単純な機能は、 このように標準入力から標準出力へ素通しでデータを送ること
したがって cat コマンドでファイルの中身を表示させるためには
cat < ファイル名
のように入力リダイレクトを使うこともできる。
パラメータとして、ファイル名を複数並べると、その内容をすべて つなげて出力する
ファイル名の代わりに -
(ハイフン)を渡すと、標準入力
(リダイレクトしてなければ端末からの打鍵)からの入力が使われる
-
を複数回使うこともできる
cat ファイル名1 - ファイル名2 -
=> ファイル1 の内容
<- 標準入力からの入力(1回め)
=> # 即時に画面にも印字される
Ctrl-D # 入力終了(1回目)
=> ファイル2 の内容
<- 標準入力からの入力(2回め)
=> # 即時に画面にも印字される
Ctrl-D # 入力終了(2回目)
別ページ参照
(以下は補足説明事項)
一台のUnixコンピュータの扱うデータは、 単一のファイルシステムで管理される。
それとは別に、個別のファイルやディレクトリについても細かく指定できる。
こういったアクセス権の制御を行うことを「アクセスコントロール」と呼び、
個別に指定されるアクセス権のことを「パーミッション」と呼ぶ。
ls -l
コマンドの出力の左端10文字がそれを表しいる。
(前述の別ページ「シェルの主な機能」の要点を再掲)
コマンドの実体
例えば前述のechoコマンドを入力すると、シェルは、 そのコマンドの実体である(プログラムが入っている)ファイル を見つけてきて、それを実行する。
which echo
で出力されるパス名(たぶん /bin/echo)がその実体。また、
file /bin/echo
などで、それがプログラムであることも確認できる。
なお、多くのコマンドはこのようにして(シェルから見て)外部のファイルがその実体であるが、
シェルの中に作り付けのコマンド(組み込みコマンドと呼ばれる)もある。
たとえば cdコマンドは、
which cd
で何も表示されない。
組み込みコマンドはたとえばこのサイトに列挙されている。
パス名展開:たとえば、
echo *
と入力すると、現在のディレクトリにあるファイル(やディレクトリ)の名前が列挙され出力される。このとき、
*
がシェルによって「パス名展開」
され、その結果として、という動作が行われる。
チルダ展開:これについてはすでに紹介した
(が以下に実例を示しておく)
echo ~
パラメータ(変数)展開:
a=12345
のように入力することで、変数 a に、(文字列としての)値 12345 がセットされる。
この変数の値は、${a}または $aという表記で参照できる。
例えば
echo $a
で出力されるし、
$a
とだけ入れると、’command 12345 not found’ のようなメッセージが表示される。
$a が展開された文字列 12345 をコマンド名として実行しようとしたから。
(あまり使われる頻度は多くないが)マニアックな使い方として、
a=ls
# .....
$a
という使い方をすると、lsコマンドが実行される。
こういった形でシェルは入力されたものについて様々な置換や展開を行う。
なお、正規表現(次回紹介予定)とワイルドカードは(似ている部分も多々あるが)別物。