Tidak dapat menjalankan satu program tertentu dari Terminal tanpa menggunakan path lengkapnya

9

Saya ingin menjalankan program ds9dari Terminal. Program ini jelas di PATH, yang saya tentukan dengan menjalankan:

which ds9
/Users/evgenii/miniconda3/envs/iraf/bin/ds9

Tetapi ketika saya menjalankan perintah dengan mengetik ds9, itu menunjukkan kepada saya kesalahan berikut:

-bash: /Applications/ds9.app/Contents/MacOS/ds9: No such file or directory

Saya masih dapat menjalankannya dengan baik jika saya menggunakan path lengkap sebagai berikut:

/Users/evgenii/miniconda3/envs/iraf/bin/ds9

Apa yang sedang terjadi? Mengapa ini mencoba dijalankan /Applications/ds9.app?

Izin adalah sebagai berikut:

-rwxrwxr-x@ 1 evgenii  staff  18613852  9 Nov 20:13 /Users/evgenii/miniconda3/envs/iraf/bin/ds9

Memperbarui:

Berikut ini adalah output dari menjalankan type -a ds9perintah:

type -a ds9
ds9 is aliased to `/Applications/ds9.app/Contents/MacOS/ds9 -xpa no'
ds9 is /Users/evgenii/miniconda3/envs/iraf/bin/ds9
Evgenii
sumber
4
Jangan gunakan which. Ini adalah program eksternal, jadi tidak bisa membedakan alias shell.
Barmar
Terima untuk bekerja dengan perintah: gunakan PATHdaripada aliasdan typebukan which.
dan

Jawaban:

19

Perintah ini tampaknya alias alias rusak. Pertama, periksa semua kecocokan ds9dalam PATHvariabel lingkungan, dengan menjalankan perintah berikut:

type -a ds9

Sesuai pertanyaan Anda yang diperbarui, jelas dari output type -a ds9perintah, bahwa alias membayangi perintah yang sebenarnya.

Untuk menjalankan perintah yang sebenarnya dengan mengabaikan alias, dan tanpa menentukan path lengkap, tambahkan karakter \(backslash) sebelum perintah. Ini mengabaikan alias bash yang didefinisikan.

Jika Anda tidak ingin menambahkan backslash di depan perintah setiap kali, cari tahu di mana alias dibuat, dan hapus, atau ganti alias dengan perintah yang sebenarnya.

Nimesh Neema
sumber
1
The ds9definition alias yang paling mungkin di ~/.bashrcdan harus dihapus ada (karena itu metode yang buruk mengarah ke masalah seperti ini). grep ds9 ~/.bashrcakan mengkonfirmasinya.
dan
4

Saya melihat ini diselesaikan untuk penanya, tetapi untuk pembaca masa depan saya ingin menyebutkan bahwa itu juga bisa menjadi kasus bahwa perintah itu di- hash dan kemudian file dihapus. (Lihat help hashuntuk info.)

type -a commandnametidak akan menunjukkan itu, hanya type commandnameakan.

Dalam hal ini, hash -d ds9akan menjadi semua yang dibutuhkan.

Wildcard
sumber