パスを指定せずに私のプログラムを実行する方法

パスを指定せずに私のプログラムを実行する方法

私が何かをコンパイルし、次のように実行したとしましょう。

$ /path/to/my/executable/mycmd
Hello World

実行するにはどうすればよいですか?

$ mycmd
Hello World 

私のコンピュータはどこでも?

答え1

あなたが探しているのはPATH環境変数です。プログラムを見つける場所をシェルに伝えます。次のコマンドを使用して、この変数の現在の値を表示できますecho

echo "$PATH"

今...新しいプログラムを使用したい場合は、ディストリビューションのパッケージマネージャを使用してインストールするのが最善です。ただし、この場合は、利用可能なパッケージで提供されていないプログラムを扱っているとします。このタイプのプログラムには2つのオプションがあります。

  1. システムにインストールされている場所にシステム全体にプログラムをインストールします。いいえパッケージからインストールされているすべてのファイルを配置します。ほとんどのシステムでは、これらの「安全な」フォルダには次の/usr/local/bin/ものが含まれます。/opt/bin/- これらのフォルダはすでにPATH間違った自分のプログラムを配置する場所は、リストされている他のフォルダを見てくださいPATH。 )
  2. 変数を修正してくださいPATH。これは、プログラムを保存できる追加のフォルダを定義し、誰かが自分のプログラムをそこに入れて実行するように欺くことができるため、安全性が低くなります。

    PATH以下を使用して変数を一時的に変更できます。

    export PATH="$PATH:/path/to/your/executable"
    

    (知っている$PATH 後ろに =)または上記の行をファイルに追加して.bashrc永久に作成します(を使用すると仮定bash)。

答え2

ユーザースクリプト(またはコンパイルされた実行可能ファイル)は通常この~/binディレクトリに保存されます。これにより、パスを指定しなくても実行できます。

ただし、インストールされているパッケージとプログラムによって配置されたスクリプトとスクリプトを混在させたくない場合は、選択した~/binディレクトリにスクリプトを保存してバインドできます~/bin~/binパスを指定せずに単純な名前を使用して端末で実行します。

一度だけこのコマンドを実行できます(再起動すると効果が消えます)。

mkdir /home/user/.overlay
sudo mount -t overlay overlay -o lowerdir=/home/user/my-scripts-directory,upperdir=/home/user/bin,workdir=/home/user/.overlay /home/user/bin

このコマンドを使用して新しいスクリプトを作成し、ログイン時に自動的に実行し、再起動後にこのバインディングを再マウントできます。

または

永続的にバインドするには、次の行を次に追加しますfstab

# bind my scripts to ~/bin
overlay /home/user/bin overlay defaults,lowerdir=/home/user/my-scripts-directory,upperdir=/home/user/bin,workdir=/home/user/.overlay 0 0

以下の方法は以前に使用したことがありますが、私が認識していない欠陥があります:~/bin実際のフォルダの内容にアクセスできなくなります。だから私はそれを使用しないことをお勧めします。上記の別の方法を見つけましたが、コメントで議論した内容を誤解しないように、この古い方法はここに残します。

このコマンドをワンタイムで実行できます(再起動後の効果は消えます)。
sudo mount --bind ~/my-scripts-directory ~/bin
このコマンドを使用して新しいスクリプトを作成し、ログイン時に自動的に実行し、再起動後にこのバインディングを再マウントできます。
永続的にバインドするには、次の行を次に追加しますfstab
# bind my scripts to ~/bin
/home/user/my-scripts-directory /home/user/bin none bind 0 0

関連情報