Bash、パスの一部として常に$ PWDをチェックしますか?


15

背景:Linuxのバックグラウンドを持っていない同僚の1人が、./いくつかのコマンドの前に使用することを尋ねましたが、他のコマンドではありませんPATH。彼の反応は、それは愚かであり、./コマンドの前に入力する必要がないことだけでした。

質問:$PWD常に最初の項目になるようにシェルの動作を簡単に変更する方法はありPATHますか?


馬鹿げているかもしれませんし、そうでないかもしれませんが、すべての環境には癖があり、これは典型的なUnixシェルの癖です。
ロンジョン

12
これはセキュリティ対策です。シェルを使用デフォルトでこれを行うには(1970年代を考える)、およびマルチユーザーシステムが広く、それのために攻撃されました。
チャールズダフィー

3
彼の応答は、それは馬鹿げているということでした:同僚はこのトピックについて自分自身を教育する必要があると述べました。そのカフスの答えは、PHBスタイルの応答を示しています。基礎となるシステムの理解も評価もありません。
クラウド

2
バイナリを単にドロップして、~/binその一部にしないのはなぜPATHですか?これにより、物事も整理されます。
セルギーKolodyazhnyy

3
Windowsの@Ziazisでは、現在のディレクトリは、それが一部であるかどうかに関係なく考慮されますPATH(このような考慮事項の通常のソースです)。
スティーブンキット

回答:


55

本当にしたい場合は.、パスの先頭に追加することでこれを行うことができます。

export PATH=".:$PATH"

ただし、これは悪い考えです。これは、シェルが現在のディレクトリのコマンドを他のコマンドよりも優先して選択するためです。誰か(または何らかのプログラム)がls頻繁に使用するディレクトリに悪意のあるコマンドをドロップすると、トラブルが発生します...


13
これは素晴らしい点ですが、おそらくを動かすだけで十分でしょう。パスの最後まで、PATH = "$ PATH :."をエクスポートします
クリストフ

12
実際、私.はあなたの最初にPATH通常のユーザーのデフォルトであったことを覚えています(少なくともHP-UXで「sam」でユーザーを作成した場合、古いSunOSについてはわかりません)。その後、このデフォルトはセキュリティ上の理由から削除されました。.の最後のアイテムを持っている場合PATHでも、典型的なタイプミスを期待できます。
フィリポス

6
@Philippos、はい、その/tmp/slようなPATHを持つユーザーをターゲットとする悪名高いいたずらスクリプトのようです。Debianおよび派生物では、slパッケージをインストールしてsl、の代わりに入力する頻度を把握しますls
ステファンシャゼラス

いいえ、それは悪い考えではありません、特にあなたが開発者である場合、それは良いものです。もちろん、悪意のあるコマンドをだれも落とさない環境を維持することも別の良い考えです。
-jamesqf

4
@jamesqf、実際に./は、現在のディレクトリでコマンドを呼び出すときに入力することをお勧めします。それとも、いつもの現在のディレクトリがある場合/project/under/development/binは、追加のことをあなたにPATH。これにより、開発者のユースケースが解決します。.あなたの始めに置くことPATHは悪い考えです、期間。
ワイルドカード

14

これはあなたの質問に対する直接的な答えではありませんが、ベストプラクティスはbinホームディレクトリに次のようにディレクトリを作成すること/home/user/binです。

mkdir -p "$HOME/bin"
echo 'PATH="$HOME/bin:$PATH"' >> "$HOME/.bashrc"
source "$HOME/.bashrc"

自分のスクリプトをそこに入れてください。PATHあなたはそれを定義しなくてあなたの個人的なスクリプトを実行するために横断されるだろう.必要。


0

が必要です。PATH変数の先頭:

export PATH=".:$PATH"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.