先日、簡単なスクリプトを作ってみた。これを、コマンドっぽく実行できるようにする方法。
Ruby 改行を削除するスクリプト - No Solution for Life
手順
- ファイルに実行権限をつける
- ディレクトリを用意して PATH を通す
詳しいやり方
通常ファイルの実行方法
たとえばdelete_n.rb
という Ruby ファイルを実行する場合、ターミナルに以下のように入力すると思う。
$ ruby delete_n.rb
ファイルに実行権限をつける
まず、delete_n.rb
のファイルの先頭に、以下のように shebang(シバン、シェバン)と呼ばれる、ファイルの2行目以降を指定したコマンド(ここではruby
)に渡す処理を書く。
#!/usr/bin/env ruby
先日のブログでは説明を省略してしまったが、以下のようにしてファイルに実行権限をつけると、./ファイル名
で実行できるようになる。
# ファイルに実行権限(x)をつける $ chmod 744 delete_n.rb または $ chmod u+x delete_n.rb $ ./delete_n.rb
./
はカレントディレクトリを表しているので、自分がいるディレクトリが変われば、入力も変わることになる。それだとコマンドとして実行するには困るので、どこからでも実行できるようにしたい。
コマンドの正体
よく使うls
コマンドは、実はls
というファイルを実行しているだけだ。自分で書いたスクリプトも、そんな風に実行できるようにしたい。
ls
というファイルはどこにあるのか?which
コマンドで調べてみる。
$ which ls /bin/ls
/bin/ls
という場所にあることがわかった。これはなぜls
だけで実行できるのか。答えは、PATH(パス)が通っているから。
$PATH
という環境変数に登録されているディレクトリ内のファイルは、ファイル名だけで実行が可能になる。以下のコマンドで確認できる。PATH が通っているディレクトリが:
区切りで出力される。
$ echo $PATH
/bin
というディレクトリが確認できるはずだ。
自作スクリプトの場合は、ホームディレクトリにそれ用のディレクトリを作って、PATH を通すことが多い。
ディレクトリを作って PATH を通す
ということで、ホームディレクトリにbin
というディレクトリを作って、delete_n.rb
を入れた。次に、~/bin
に PATH を通す。
自分は bash を使っているので、ホームディレクトリの .bash_profile
というファイル(なかったら作る)に以下のように記述。
.bash_profile
export PATH=$PATH:~/bin
ターミナルを再起動して $ echo $PATH
で /Users/ユーザー名/bin
が確認できれば OK。
これでどこのディレクトリからでも$ delete_n.rb
のようにファイル名だけで実行できるようになる。それでもコマンドにしては長いので、ファイル名をもっと短くしたらいい。ただし、既存のコマンドと名前がかぶらないように注意。
PATH の優先順位
もし名前がかぶったときは、$PATH
で表示されるディレクトリの左から順番に探索される。
ちなみに、export PATH=$PATH:~/bin
のように$PATH
の右側にディレクトリを書くと、末尾(右側)に追加される。~/bin:$PATH
のように左側に書くと先頭に追加される。
PATH の通し方については、.bashrc に書くという記事も見かけるが、以下の記事を読んで .bash_profile にした。もし違ったら教えてください。