UNIXシェルスクリプト第10章 Part5

シェルアーカイブを作成するシェルスクリプト Shar

※シェルアーカイブというのはBSD4.4以降に作りこまれた機能の1つ。

少数のファイルをftpやmailで配布するのに便利なようにと作られたもの。

シェルスクリプトの中にファイルのリストと中身も入れて1つにしてしまうことで、

そのシェルスクリプトを実行すれば元のファイルを復元できるようにしている。

PCでいう自己展開形式のファイルを作成するようなもの。

 

使い方について

abcというディレクトリ下のファイルをシェルアーカイブにし、それを誰か別の人に渡したり別のディレクトリに移動させて展開するまで。

アーカイブを作成するには、

$ cd directory

$ Shar `find . -print` > directory.shar

このdirectory.sharファイルを人に渡したりメールで送ったりすればいい。

受け取った方は以下のようにすれば展開できる。

$ mkdir directory

$ mv directory.shar directory

 

$ cd directory

$ sh directory.shar

ただし、メールでそのまま渡された場合には$ sh directory.shar を行う前に。エディタを使ってこのファイルを開きメールのヘッダ部分を削除しておかなくてはならない。

なお、directory.sharという名称はどういう名前でも問題ない。

 

echo "#!/bin/sh"

echo "# This is a shell archive; to unpack:"

echo "# 1. Remove everything before the \"#!/bin/sh\"."

echo "# 2. Save the rest of the archive."

echo "# 3. Execute the archive by entering \"sh archive\"."

echo "#"

echo "# This archive contains the following files:"

echo "#"

作成するシェルアーカイブの先頭部分。

メッセージ中に日本語は書かないほうが良い。

 

for FILE

do

    echo "#    $FILE

done

このシェルアーカイブに含むファイルの名称をリストしている。

for FILE は for FILE in $* と同じ意味で、シェルスクリプトの引数全部が順番にこの変数に代入されていく。

 

sed 's/^X//'

sedコマンドで s/old/new とするとoldをnewで置き換える。

 

   sed 's/^X//' >$FILE <<\EOF

XThis is a

XSample file.

EOF

<<\EOF とリダイレクトすると、次にEOFという文字が現れるまでをコマンドの入力として扱える。

\ があれば変数を値に変換することができ、なければ変換は行われない。

このような書き方をヒア・ドキュメントという。