/bin/bash
とwhich
コマンドの微妙な非互換性があります。
私のシステム(Linux Mint)では、which
コマンドは実際にはシェルスクリプトであり、組み込みコマンドではなく、最初の行は#! /bin/sh
です。これは、/bin/sh
の$PATH
変数の処理を使用していることを意味します。
これは(それは時々/bin/bash
へのシンボリックリンクです)を設定し、少し実験は、それが自分のホームディレクトリへのフルパスであるかのようにbash
が$PATH
にリテラル~
文字を扱うことを示しているが、どのよう/bin/sh
によって異なります/bin/sh
はありません。あなたは$PATH
、bash
(インタラクティブシェル)の要素の一つとして
~/Development/android_sdk_latest/platform-tools
を持っているのでadb
コマンドを見つけることができますが、sh
(which
で使用されるシェル)することができません。
明らかにOSXシステムを含む一部のシステムでは、which
はバイナリ実行可能です。また、bashスクリプトではないので、bashの扱いである$PATH
とは一致しません。
2つの変更を行うことをおすすめします。
まず、$PATH
にリテラル~
を入れないでください。たとえば、むしろこれよりも、あなたの$PATH
にplatform-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 Expansionのbash manualのセクションに記載されています。
'type adb'とは何ですか?あなたの '$ PATH'には文字' ''がありますか? –
@KeithThompson - 'adbはハッシュされています(/ Users/me/Development/android_sdk_latest/platform-tools/adb)、 と私はそう思います。 'export PATH =" $ PATH:〜/ Development/android_sdk_latest/platform-tools "' –