コマンドラインから実行させる際のスクリプト指定方法
- 相対パスによるスクリプト指定
- 絶対パスによるスクリプト指定
- PATH通しによるスクリプト指定
- ドットスラッシュ無し相対パスによるスクリプトの指定
※sourceコマンドやshコマンドの引数としてスクリプトを指定する場合は今回割愛します。
下記のように、/home/fooにbar.shが配置されている事を前提に、説明します。
#!/bin/sh
echo "hello, world"
1.相対パスによるスクリプト指定
$ cd /home/foo
$ ./bar.sh
hello, world
冒頭のドットスラッシュ(./ or ../)を基本的に省略してはいけません。その場合、エラーになり実行出来ません。ただし、例外として4.の場合が有ります。カレントディレクトリに依存しますがシンプルです。
2.絶対パスによるスクリプト指定
$ /home/foo/bar.sh
hello, world
カレントディレクトリに依存しませんが長くなりやすい。
3.PATH通しによるスクリプト指定
まずはPATHを通します。
$ export PATH=$PATH:/home/foo
パス追加を確認します。(パスをリスト表示し、追加パスが末尾に有る事を目視)
※目視しやすくするために、trコマンドで整形しています。
$ echo $PATH | tr ':' '\n'
スクリプト実行します。
$ bar.sh
hello, world
カレントディレクトリに依存しません。
cdやlsのようなコマンドと同様に、何処からでもシンプルに実行出来ます。
4. ドットスラッシュ無し相対パスによるスクリプトの指定
例外的に、スクリプトがカレントディレクトリの下位に配置されている場合のみ、ドットスラッシュ無しは可能です。
Railsにおけるアプリディレクトリからbinstubの「bin/rails s」などを叩く場合が、実務例ですね。
$ cd /home
$ foo/bar.sh
hello, world
下記のように、カレントディレクトリ配置のスクリプトに対する場合、ファイルだけを指定するとエラーになり実行出来ません。この場合は1.のやり方、即ちドットスラッシュを付けて指定する必要が有ります。
$ cd /home/foo
# NG
$ bar.sh
# OK
$ ./bar.sh
まとめ
スクリプト配置 | 1.相対パス | 2.絶対パス | 3.PATH通し | 4.ドットスラッシュ無し相対パス |
---|---|---|---|---|
カレントディレクトリ | 〇 | 〇 | 〇 | ✖ |
カレントの下位 | 〇 | 〇 | 〇 | 〇 |
カレントの上位 | 〇 | 〇 | 〇 | ✖ |