シェルスクリプトから別のスクリプトを呼ぶ

ここのところ私生活の方でバタバタしてしまっていてなかなか更新ができていませんでしたが
ようやく更新できそうで約1ヶ月ぶりの更新です。今回は前回に引き続きシェルスクリプトについてです。
前回の記事はこちら
前回「Hello World」を表示するスクリプトを作成しましたが、今回はそのスクリプトを
別のディレクトリから実行してみましょう。
ゴールとしては前回作成したHello.shが呼び出されて「Hello World」が表示されることです。
この記事は以下の人におすすめです。
- シェルスクリプトを別のシェルスクリプトから呼びたい
- スクリプトを分割して運用を考えている
- 既存のスクリプトをうまく利用したい。
別シェルスクリプトからの呼び出しを取り上げた背景
前回はシェルスクリプトについて取り上げましたが、実際の運用ではシェルスクリプトが
別のシェルスクリプトを呼び出しているということがある場合も多々あるので取り上げてみました。
他にも別シェルスクリプトを既存のスクリプトをそのまま利用して、新しいスクリプトの一部として
組み込むことができたり、メンテナンスしやすいスクリプトの作成につながるのではないと思い
取り上げさせてもらいました。
別ディレクトリのシェルを呼ぶ
ステップ1:準備
それでは早速別ディレクトリのシェルを呼ぶ準備を進めていきます。
まずはテスト用のディレクトリを作成し、作成したディレクトリに前回作成したHello.shをコピーします。
ファイルのコピーについてはcpコマンドを使ってください(※コピーが不要な場合はmvでもOKです)。
コピーした後は実行権限が消えてしまうため、chmodコマンドで改めて実行権限を付与するようにしてください。
作成したディレクトリの中身は以下のようになっていればOKです。

ステップ2:別ディレクトリのスクリプトからHello.shを実行
さて、いよいよ本題のこのスクリプトを別のディレクトリのスクリプトから実行してみます。
実行するスクリプトは以下です。
内容としては変数MY_SCRIPT_PATHを宣言し、実行したいシェルスクリプトのpathを設定します。
その後cdコマンドを実行してカレントディレクトリを変更し、カレントディレクトリ配下にあるHello.shを
実行するといったいたってシンプルなスクリプトです。
それではこのスクリプトに実行権限を付与して実行してみましょう。

無事に「Hello World」が出力されていますね。
ちょっとあっさり過ぎな気もしますが、これで別のディレクトリのシェルスクリプトを実行できました。
この他にもexpectコマンドをファイルにまとめ、シェルスクリプトから呼ぶといった使い方もできます。
これは特にsshログインなど入力待ちが発生する操作を自動化したいときによく使う方法です。
expectスクリプトについてはまた別の機会に紹介出来ればと思います。
最後に
今回の別ディレクトリのシェルスクリプト実行をマスターできると非常に作業効率化の幅が広がると感じました。
今回のスクリプトは変数とcdを使ってディレクトリを移動して実行するという方法を利用しましたが
他にも環境変数やシェル変数を利用した方法などもあります。
前述したようなexpectコマンドを使用した方法等もあるので今後記事にして紹介できればと思います。
シェルスクリプトを使ってファイルのコピーや削除など日々の面倒な作業を自動化することで
一気に時間を創出できます。
内容もLinuxコマンドを覚えれば書き方はそこまで難しくないので習熟難度のわりにリターンは大きいです。
是非皆さんもシェルスクリプトに挑戦してみてください。
それではまた次回お会いしましょう!
余談ですがにスクリプト言語(代表的なのはperl)というものもあるので
スクリプト言語についても勉強しようかと考えている今日この頃です。
管理人おすすめの本
シェルスクリプトに慣れてきたら次はこのような本を読んでみてはいかがでしょうか?
環境に左右されにくい本当の意味での便利なスクリプトが開発できます。
また、20年は大げさかもしれませんが長く使えるスクリプトを作成するためにも読んでおいて
損はない本だと思います。
