0
0

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 3 years have passed since last update.

ファイル名だけでファイルを実行する方法(pathを通す)

Last updated at Posted at 2021-03-16

パスを指定してファイルを実行する

hello
echo "hello world"

自分が実行したいファイルがあるときターミナルでパスを指定する。

$ ./hello              // 相対パス
$ ~/document/hello   // 絶対パス

よく実行するファイルは、毎回入力が大変なので、ファイル名を入力するだけでファイルを実行できるようにする。

ファイル名のままコマンドを実行する方法

$ mkdir ~/bin 

ホームディレクトリにbinディレクトリを作る。ここにコマンドとなるファイルを置いていくこととする。

$ PATH=$PATH:~/bin

~/binのpathを通す。そうすることで、~/bin以下にあるファイル名でファイルを実行できるようになる。

$ echo $PATH

pathが通ってるかエコーで確認できる。

これで、bin以下に置かれたファイルは、どこでもファイル名だけで実行できるようになる。

$ hello
$ hello world 

注意点

カレントディレクトリ(./)をPATHに入れてはいけない。カレントディレクトリに名前が同じファイルがあるとそれが意図せず実行されてしまうため。悪意のあるファイルであった場合、などリスクが高い。

仕組み

 「コマンドファイルをパス付きで指定する」ということは、例えば「ls」コマンドならば「/bin/ls」と入力する、ということになります。しかし、よく使うコマンドを毎回パス付きで指定するのは非常に面倒です。

Linuxでは、「コマンドサーチパス(コマンド検索パス)に登録してあるディレクトリにあるファイルは、パス名を省略してよい」という決まりになっています。「パス」だけで、このコマンドサーチパスを指すこともあります。

コマンドサーチパスは、「PATH」という名前の「環境変数」に保存されています。環境変数は、コマンドを実行している環境、すなわちOS全体で参照できる変数ということです。“PATHという変数”の内容は、「echo $PATH」コマンドで確認できます。

 ここで、コマンドのパス名指定について少し考えてみましょう。

 「コマンドはファイルをパス名付きで指定しなくてはならない。ただし、PATHにあるものはパス名を省略できる」ということは、「パス名付きならば、PATHにない場所にあるコマンドでも実行できる」という意味にもなります。

 例えば、「/tmp」というディレクトリにある「mycommand」という実行ファイルは、コマンドラインで「/tmp/mycommand」と指定することで実行できます。とにかく“パス付き”であればよいので、絶対パスでも、相対パスでも構いません。

 優先順位

コマンドをパス名なしで実行すると、シェルは
(1)エイリアス
(2)ビルトインコマンド
(3)PATHに指定されたディレクトリ
の順に、該当するコマンドを探します。

確認方法

type コマンド

でエイリアスなのか、ビルトインかなどがわかるようになっている。

他の方法

その他の方法としては、エイリアスを通しても可能。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?