Неможливо запустити одну конкретну програму з Терміналу, не використовуючи повний шлях


9

Я хочу запустити програму 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

4
Не використовуйте which. Це зовнішня програма, тому вона не може розповісти про псевдоніми оболонки.
Бармар

Receipe до роботи з командами: використовувати PATHзамість aliasі typeзамість which.
дан

Відповіді:


19

Команда, мабуть, псевдонім зламаному псевдоніму. По- перше, перевірка всіх матчів за ds9в PATHзмінної оточення, виконавши наступну команду:

type -a ds9

Згідно з вашим оновленим запитанням, з виводу type -a ds9команди видно , що псевдонім затінює фактичну команду.

Щоб виконати фактичну команду, ігноруючи псевдонім та не вказуючи повний шлях, додайте \перед командою символ (зворотний косий рядок). Це ігнорує будь-який псевдонім, визначений bash.

Якщо ви не хочете щоразу наперед додавати зворотну косу рису перед командою, з’ясуйте, де створюється псевдонім, або видаліть його, або замініть псевдонім фактичною командою.


1
Визначення ds9псевдоніму, найімовірніше, є ~/.bashrcі його слід видалити (оскільки це поганий метод, що призводить до подібної проблеми). grep ds9 ~/.bashrcпідтвердить це.
дан

4

Я бачу, що це було вирішено для запитувача, але для майбутніх читачів я хочу зазначити, що також може статися так, що команда була хеширована, а потім файл видалений. (Дивіться help hashінформацію.)

type -a commandnameне покаже вам цього, тільки type commandnameбуде.

У цьому випадку hash -d ds9було б все, що було б потрібно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.