3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

シェルスクリプト実行におけるスクリプトの指定

Last updated at Posted at 2018-12-23

コマンドラインから実行させる際のスクリプト指定方法

  1. 相対パスによるスクリプト指定
  2. 絶対パスによるスクリプト指定
  3. PATH通しによるスクリプト指定
  4. ドットスラッシュ無し相対パスによるスクリプトの指定

※sourceコマンドやshコマンドの引数としてスクリプトを指定する場合は今回割愛します。

下記のように、/home/fooにbar.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.ドットスラッシュ無し相対パス
カレントディレクトリ
カレントの下位
カレントの上位
3
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?