Không thể chạy một chương trình cụ thể từ Terminal mà không sử dụng đường dẫn đầy đủ của nó


9

Tôi muốn chạy một chương trình ds9từ Terminal. Chương trình rõ ràng là trong PATH, mà tôi xác định bằng cách chạy:

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

Nhưng khi tôi chạy lệnh bằng cách gõ ds9, nó hiển thị cho tôi lỗi sau:

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

Tôi vẫn có thể thực hiện tốt nếu tôi sử dụng đường dẫn đầy đủ như sau:

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

Chuyện gì đang xảy ra vậy? Tại sao nó cố chạy /Applications/ds9.app?

Quyền như sau:

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

Cập nhật:

Đây là đầu ra của type -a ds9lệnh đang chạy :

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
Đừng sử dụng which. Đây là một chương trình bên ngoài, vì vậy nó không thể nói về bí danh shell.
Barmar

Nhận để làm việc với các lệnh: sử dụng PATHchứ không phải aliastypehơn là which.
dan

Câu trả lời:


19

Lệnh rõ ràng là bí danh cho một bí danh bị hỏng. Trước tiên, hãy kiểm tra tất cả các kết quả khớp ds9trong PATHbiến môi trường, bằng cách thực hiện lệnh sau:

type -a ds9

Theo câu hỏi được cập nhật của bạn, rõ ràng từ đầu ra của type -a ds9lệnh, rằng một bí danh đang che mờ lệnh thực tế.

Để thực thi lệnh thực tế bằng cách bỏ qua bí danh và không chỉ định đường dẫn đầy đủ, hãy thêm \ký tự (dấu gạch chéo ngược) trước lệnh. Điều này bỏ qua bất kỳ bí danh bash xác định.

Nếu bạn không muốn thêm dấu gạch chéo ngược trước lệnh mỗi lần, hãy tìm ra nơi bí danh đang được tạo và xóa nó hoặc ghi đè bí danh bằng lệnh thực tế.


1
Các ds9định nghĩa bí danh có lẽ là hầu hết trong ~/.bashrcvà cần được loại bỏ ở đó (vì đây là một phương pháp xấu dẫn đến loại vấn đề). grep ds9 ~/.bashrcsẽ xác nhận nó.
dan

4

Tôi thấy điều này đã được giải quyết cho người hỏi, nhưng đối với những độc giả tương lai tôi muốn đề cập rằng đó cũng có thể là trường hợp lệnh được băm và sau đó xóa tệp. (Xem help hashđể biết thông tin.)

type -a commandnamesẽ không cho bạn thấy rằng, chỉ type commandnamesẽ.

Trong trường hợp này, hash -d ds9sẽ là tất cả những gì cần thiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.