スクリプトに権限を与えてコマンド検索パスに保存する
頻繁に行う一連の作業をスクリプトにまとめておくと、コマンドが一つで済んだり、タイプミスによるエラーを回避できたりといろいろ便利です。
現在作業しているディレクトリにスクリプトファイルを保存して $ ./file_name のように実行してもそれはそれで便利なのですが、コマンド検索パスに保存して、どのディレクトリからでも、どのユーザからでも実行できるようにしておくと更に便利です。
つまり自作のスクリプトを、標準でインストールされている ls や cpコマンドのように実行できるようになるわけです。
手順としては次の3つ。
- スクリプトを作成する
- $ chmod a+x file_name と叩いてスクリプトに実行権限を与える
- $ sudo cp file_name /usr/local/bin/file_name として、コマンド検索パスに保存
ここまでやったら $ which file_name と叩いてスクリプトのパスが表示されれば、$ file_name という感じで通常のコマンドと同じように実行できます。
スクリプトの中身はシェルスクリプト(#!/bin/sh)でも Perlスクリプト(#!/usr/bin/perl)でも、以上の流れは一緒です。
一連の作業をひとつのシェルスクリプトにまとめる
例えば上記の流れで使用したコマンドたちを順番に並べると下記のようになります。
$ chmod a+x file_name $ sudo cp file_name /usr/local/bin/file_name $ which file_name
これらを一つのシェルスクリプトにまとめることによって、3行叩かなければいけなかったものを1行で実行できるようになります。
仮にシェルスクリプトの名前を cpbin としましょう。
$ cpbin file_name
上記のワンライナーで一連の作業を実行します。
シェルスクリプトの中身は下記のようになります。
#!/bin/sh for fname in $@ do chmod a+x $fname sudo cp $fname /usr/local/bin/$fname which $fname done
引数に取った file_name をスクリプト内の変数 fname に格納している以外は3つのコマンドを並べているだけです。
また、for文によって、引数に複数のファイルを指定してもそのファイル数分だけ繰り返し実行するようになっています。
ちなみにスクリプト内に sudo が含まれていますので、$ cpbin file_name としたあとに管理者パスワードの入力を求められるかもしれません。
この cpbin というスクリプトも chmod で権限を付けて /usr/local/bin に保存しておけばどこからでも実行できるようになります。