「$ PATH」および「〜/ bin」とは何ですか?個人用スクリプトを作成するにはどうすればよいですか?


29

なに$PATH

自分だけが使用できるコマンド/プログラムを作成するにはどうすればよいですか?前述の
このパスを見ました~/binが、何に使用され、どのように使用しますか?


これは、「実際の質問」というよりもFAQやWikiの資料であるため、多少実験中です。以前の回答(リンクされた右側のサイドバー)で〜/ binについて言及し、それをPATHに追加する方法について誰かがコメントしたため、プロンプトが表示されました:短いコメントの代わりに、〜/ binがこの投稿にリンクできるようになりました言及した。

回答:


26

$ PATHは、コマンドの検索に使用される環境変数です。〜はホームディレクトリであるため、〜/ binは/ home / user / binになります。通常のディレクトリです。

たとえば、シェルで「ls」を実行すると、実際には/ bin / lsプログラムが実行されます。正確な場所は、システム構成によって異なる場合があります。これは、/ binが$ PATHにあるために発生します。

パスを表示して、特定のコマンドが配置されている場所を見つけるには:

$ echo $PATH
/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:...
$ which ls     # searches $PATH for an executable named "ls"
/bin/ls
$ ls           # runs /bin/ls
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ /bin/ls      # can also run directly
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

独自のプライベートbinディレクトリを作成するには、パスに追加するだけです。これを行うには、〜/ .profile(隠しファイル)を編集して以下の行を含めます。行にコメントが付けられている場合は、コメントを外すだけで済みます。彼らがすでにそこにいるなら、あなたはすべて準備ができています!

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
  PATH="$HOME/bin:$PATH"
fi

ここで〜/ binディレクトリを作成する必要があります。ログイン時に.profileが実行され、その時点で〜/ binが存在する場合にのみ追加されるため、更新されたPATHを表示するには再度ログインする必要があります。

テストしてみましょう:

$ ln -s $(which ls) ~/bin/my-ls   # symlink
$ which my-ls
/home/user/bin/my-ls
$ my-ls -l ~/bin/my-ls
lrwxrwxrwx 1 user user 7 2010-10-27 18:56 my-ls -> /bin/ls
$ my-ls          # lookup through $PATH
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ ~/bin/my-ls    # doesn't use $PATH to lookup
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

3
whichを使用するときの注意点の1つは、ファイルシステム内のバイナリであるコマンドのみを検出し、シェルのビルトイン、エイリアス、または関数を報告しないことです。多くの場合、type実際のコマンドがシェルによってどのように解決されるかを確認するために使用すると便利です。例えば:which echotype echo異なることを報告し、whichリターン「/ binに/エコー」が、「タイプ」に戻り、それはシェルが「/ binに」内のファイルをオーバー好むでしょうシェル組み込み、だという。
スティーブビーティー

@Steve Beattie、+ 1。対話型シェルwhichによって、typeまたはcommand対話型シェルでより適切に置き換えられ、スクリプトではまったく役に立ちません。
ガイラ

私が気づいたことに注意してください- $HOME変数は$PATH何らかの理由で機能しません。つまり、~代わりに符号を使用する必要があります。
ハイ天使

19

~/binユーザーのみが利用できるコマンド/プログラムについて

最近のUbuntuバージョンでは、ディレクトリが存在している場合にのみ、ディレクトリが~/binディレクトリに含まれます。$PATH~/bin

存在しない場合:

  1. ~/.profile次のスタンザが含まれていることを確認します(デフォルトでは~/.profile既に含まれています)。

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    
  2. ~/binディレクトリを作成します。

    mkdir -p ~/bin
    
  3. コンピューターを再起動するか、bashに再読み込みを強制します~/.profile

    exec -l bash
    

「リブートまたはexec -l bash」ヒントをありがとう。-lフラグは何をしますか?で説明が見つかりませんman exec
evanrmurphy

3
exec -lログインシェル[ wiki.bash-hackers.org/commands/builtin/exec]としてbashを実行します。要するに、bashに強制的に再読み込み/etc/profileとを強制し~/.profileます。実行exec bashするだけで再読み込みのみ~/.bashrcです。
ダニーロピアッツァルンガ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.