2016-06-01 2 views
2

これは私を悩ましているbashの奇妙なことです。bash: "which adb"は何も返しませんが、 "command -v adb"は私が期待しているものを返します

私はOSXです。

私はAndroid SDKをインストールしました。その結果、adbツールは私のホームディレクトリのフォルダにあります。そのフォルダはenvとして報告されているように私のパスに表示されます。~/Development/android_sdk_latest/platform-toolsです。

adb自体はうまく動作しますが、which adbの場合、結果は空です。 command -v adbを実行すると、結果は完全なパスになります。/Users/me/Development/android_sdk_latest/platform-tools/adb

adbは私のエイリアスには表示されません。

暗闇の中で私はbashパスまたはwhichとはどのような微妙な違いがありますか?

+1

'type adb'とは何ですか?あなたの '$ PATH'には文字' ''がありますか? –

+0

@KeithThompson - 'adbはハッシュされています(/ Users/me/Development/android_sdk_latest/platform-tools/adb)、 と私はそう思います。 'export PATH =" $ PATH:〜/ Development/android_sdk_latest/platform-tools "' –

答えて

4

/bin/bashwhichコマンドの微妙な非互換性があります。

私のシステム(Linux Mint)では、whichコマンドは実際にはシェルスクリプトであり、組み込みコマンドではなく、最初の行は#! /bin/shです。これは、/bin/sh$PATH変数の処理を使用していることを意味します。

これは(それは時々/bin/bashへのシンボリックリンクです)を設定し、少し実験は、それが自分のホームディレクトリへのフルパスであるかのようにbash$PATHにリテラル~文字を扱うことを示しているが、どのよう/bin/shによって異なります/bin/shはありません。あなたは$PATHbash(インタラクティブシェル)の要素の一つとして

~/Development/android_sdk_latest/platform-tools 

を持っているのでadbコマンドを見つけることができますが、shwhichで使用されるシェル)することができません。

明らかにOSXシステムを含む一部のシステムでは、whichはバイナリ実行可能です。また、bashスクリプトではないので、bashの扱いである$PATHとは一致しません。

2つの変更を行うことをおすすめします。

まず、$PATHにリテラル~を入れないでください。たとえば、むしろこれよりも、あなたの$PATHplatform-toolsディレクトリを追加します

export PATH="$PATH:~/Development/android_sdk_latest/platform-tools" # BAD! 

は、次の操作を行います。$HOMEは、あなたのホームディレクトリへのパスに展開されます

export PATH="$PATH:$HOME/Development/android_sdk_latest/platform-tools" 

~は、二重引用符で囲まれた文字列内では展開されません。

第2に、whichコマンドを使用する代わりに、bashに組み込まれたtypeコマンドを使用します。typeは、/bin/shのルールではなく、現在のシェルのルールに従います。whichが見ることができないシェル機能とエイリアスを報告することができます。これにはいくつかの便利なコマンドラインオプションがあります。詳細については、bashプロンプトにhelp typeと入力してください。

$PATHにある~文字の処理は、Tilde Expansionbash manualのセクションに記載されています。

+0

が死んでしまいました。 私の 'which'(/ usr/bin/which)はスクリプトではなくバイナリであるように見えます。 $ HOMEについてのヒントをありがとう。私はその変更を行い、「今」は「命令」に同意した。 私は 'type'について知らなかった。それは素晴らしいツールです! –

+0

@orionelenzil:興味深い。私はそれがOSXで違うことに驚かされるべきではないと思います。しかし、私は ''おそらくCの ''も '$ PATH'で'〜 'を扱わないことに驚くことはありません。 –

関連する問題