Вы столкнулись с тонкой несовместимостью между /bin/bash
и командой which
.
В моей системе (Linux Mint) команда which
на самом деле является скриптом оболочки, а не встроенной командой, а первая строка - #! /bin/sh
. Это означает, что он использует обработку /bin/sh
переменной $PATH
.
Это может варьироваться в зависимости от того, как /bin/sh
настроен (это иногда символьная ссылка /bin/bash
), но немного экспериментирования показывает, что bash
обрабатывает буквальный ~
символа в $PATH
, как будто это полный путь к вашей домашней директории, но /bin/sh
нет. Поскольку у вас есть
~/Development/android_sdk_latest/platform-tools
в качестве одного из элементов вашего $PATH
, bash
(интерактивной оболочки) может найти команду adb
, но sh
(оболочка используется which
) не может.
В некоторых системах, по-видимому, включая вашу систему OSX, which
является двоичным исполняемым файлом. Опять же, поскольку это не сценарий bash, он не будет соответствовать обработке bash $PATH
.
Я рекомендую сделать два изменения.
Для начала, не помещайте литературу ~
в свои $PATH
. Например, чтобы добавить каталог platform-tools
к вашему $PATH
, а не так:
export PATH="$PATH:~/Development/android_sdk_latest/platform-tools" # BAD!
сделать это:
export PATH="$PATH:$HOME/Development/android_sdk_latest/platform-tools"
$HOME
будет расширяться на пути к вашей домашней директории. ~
не расширяется в строках с двойными кавычками.
Во-вторых, вместо использования команды which
используйте команду type
, которая встроена в bash
.type
будет следовать правилам текущей оболочки, а не /bin/sh
, и он сможет сообщать о функциях оболочки и псевдонимах, которые which
не может видеть. Он имеет несколько полезных параметров командной строки; тип help type
при запросе bash для деталей.
пропитки
оболочки Bash по ~
символов в $PATH
описана в разделе bash manual «s на Tilde Expansion.
Что предлагает вам 'type adb'? И у вас есть буквальный символ '' 'в вашей' $ PATH'? –
@KeithThompson - 'adb hashed (/ Users/me/Development/android_sdk_latest/platform-tools/adb)', и я думаю, да, я знаю. Я установил путь к исходному сценарию с этой строкой: 'export PATH =" $ PATH: ~/Development/android_sdk_latest/platform-tools "' –