Я хочу запустить программу ds9
из Терминала. Программа явно находится в PATH, который я определил, запустив:
which ds9
/Users/evgenii/miniconda3/envs/iraf/bin/ds9
Но когда я запускаю команду, набирая ds9
, она показывает мне следующую ошибку:
-bash: /Applications/ds9.app/Contents/MacOS/ds9: No such file or directory
Я все еще могу выполнить это нормально, если я использую полный путь следующим образом:
/Users/evgenii/miniconda3/envs/iraf/bin/ds9
В чем дело? Почему он пытается бежать /Applications/ds9.app
?
Разрешения заключаются в следующем:
-rwxrwxr-x@ 1 evgenii staff 18613852 9 Nov 20:13 /Users/evgenii/miniconda3/envs/iraf/bin/ds9
Обновить:
Вот результат выполнения type -a ds9
команды:
type -a ds9
ds9 is aliased to `/Applications/ds9.app/Contents/MacOS/ds9 -xpa no'
ds9 is /Users/evgenii/miniconda3/envs/iraf/bin/ds9
which
. Это внешняя программа, поэтому она не может сказать об псевдонимах оболочки.PATH
а неalias
иtype
, чемwhich
.Ответы:
Команда явно имеет псевдоним для сломанного псевдонима. Во-первых, проверьте все совпадения
ds9
вPATH
переменной среды, выполнив следующую команду:type -a ds9
Согласно вашему обновленному вопросу, из вывода
type -a ds9
команды видно , что псевдоним скрывает фактическую команду.Чтобы выполнить фактическую команду, игнорируя псевдоним и не указывая полный путь, добавьте
\
перед командой символ обратной косой черты. Это игнорирует любой псевдоним, определенный в bash.Если вы не хотите каждый раз ставить обратную косую черту перед командой, выясните, где создается псевдоним, и либо удалите его, либо переопределите псевдоним фактической командой.
источник
ds9
псевдонима, скорее всего, есть~/.bashrc
и должно быть там удалено (потому что это плохой метод, приводящий к такого рода проблемам).grep ds9 ~/.bashrc
подтвердит это.Я вижу, что это было решено для спрашивающего, но для будущих читателей я хочу упомянуть, что это также может быть случай, когда команда была хеширована, а затем файл удален. (См.
help hash
Для информации.)type -a commandname
не покажет вам, толькоtype commandname
будет.В этом случае
hash -d ds9
будет все, что потребуется.источник