Tôi đã gặp một vấn đề có vẻ kỳ quái về vỏ, với một lệnh trong $ PATH rằng shell (ksh, chạy trên Linux) dường như hèn nhát từ chối. Nếu không đủ điều kiện ra lệnh, tôi nhận được:
# mycommand
/bin/ksh: mycommand: not found [No such file or directory]
nhưng tập tin có thể được tìm thấy bằng cách:
# which mycommand
/home/me/mydir/admbin/mycommand
Tôi cũng thấy rõ thư mục đó trong $ PATH:
# echo $PATH | tr : '\n' | grep adm
/home/me/mydir/admbin
Các exe tại vị trí đó có vẻ bình thường:
# file /home/me/mydir/admbin/mycommand
/home/me/mydir/admbin/mycommand: setuid setgid ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped
# ls -l mycommand
-r-sr-s--- 1 me mygroup 97892 2012-04-11 18:01 mycommand
và nếu tôi chạy nó một cách rõ ràng bằng cách sử dụng một đường dẫn đủ điều kiện:
# /home/me/mydir/admbin/mycommand
Tôi thấy đầu ra dự kiến. Một cái gì đó chắc chắn là nhầm lẫn cái vỏ ở đây, nhưng tôi không biết nó có thể là gì?
EDIT: tìm thấy những gì trông giống như một câu hỏi tương tự: Nhị phân sẽ không thực thi khi chạy với một đường dẫn. Ví dụ> chương trình không hoạt động nhưng chương trình hoạt động tốt
Tôi cũng đã thử nghiệm nhiều hơn một lệnh như vậy trong $ PATH của mình, nhưng chỉ tìm thấy một lệnh:
# for i in `echo $PATH | tr : '\n'` ; do test -e $i/mycommand && echo $i/mycommand ; done
/home/me/mydir/admbin/mycommand
EDIT2:
Đến sáng nay, vấn đề đã biến mất và giờ tôi có thể thực thi được.
Điều đó có thể được coi là xác nhận đề xuất đăng xuất và đăng nhập, nhưng tôi đã thực hiện điều đó tối qua mà không thành công. Việc đăng xuất / đăng nhập đó cũng đã thực hiện tương đương với việc chạy lệnh 'hash -r' đã được đề xuất (mà fwiw cũng có vẻ là một nội dung ksh, và không chỉ là một bash dựng sẵn).
Đáp lại một số câu trả lời:
Đây là một tập tin thực thi không phải là một tập lệnh (xem tham chiếu ELF trong đầu ra lệnh tập tin).
Tôi không nghĩ rằng một bước tiến sẽ có ích. Điều đó kết thúc buộc lệnh phải thực thi đầy đủ. Tôi cho rằng tôi có thể đã thực hiện một bước đi kèm trên vỏ hiện tại, nhưng vì tôi không còn có thể trách móc nữa nên không có ý định thử điều đó.
không có dấu chấm phẩy trong $ PATH. Vì tôi không thể repro nữa, tôi sẽ không làm hỏng câu hỏi này với $ PATH đầy đủ.
thử một cái vỏ khác (tức là bash) sẽ là thứ tôi cũng đã thử, như đã đề xuất. Khi vấn đề không còn nữa, bây giờ tôi sẽ không biết liệu điều đó có giúp được gì không.
Nó cũng được đề nghị với tôi là kiểm tra các quyền của thư mục. Làm như vậy, đối với mỗi thư mục cho đến cái này tôi thấy:
# ls -ld $HOME $HOME/mydir $HOME/mydir/admbin
drwxr-xr-x 10 me root 4096 2012-04-12 12:20 /home/me
drwxrwsr-t 22 me mygroup 4096 2012-04-12 12:04 /home/me/mydir
drwxr-sr-x 2 me mygroup 4096 2012-04-12 12:04 /home/me/mydir/admbin
Quyền sở hữu thư mục $ HOME bị rối tung (không nên là nhóm gốc). Điều đó có thể gây ra các vấn đề khác, nhưng tôi không thấy nó đã gây ra vấn đề này như thế nào.