2015-05-12 11 views
13

Mỗi khi tôi cố gắng gọi lệnh không tồn tại (ví dụ: $ a) trong bảng điều khiển (/ bin/bash) trình thông dịch chờ trong một thời gian dài. Và khi tôi ngắt nó (^ C), tôi nhận được một thông báo lỗi từ trình thông dịch Python. Thay vào đó, tôi hy vọng nó sẽ cho tôi biết rằng lệnh không được công nhận. Tại sao chuyện này đang xảy ra?Lệnh không được nhận dạng trong bash được bắt bởi trình thông dịch python

$ a 
^C 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/encodings/__init__.py", line 32, in <module> 
[email protected]:/home/antonio/workspace/biz_index#  from encodings import aliases 
    File "/usr/lib/python2.7/encodings/aliases.py", line 17, in <module> 
    """ 
KeyboardInterrupt 
^C 
+5

Có gì trong 'PATH' của bạn? –

+3

Kết quả của 'a' là gì? –

+2

Điều này chỉ xảy ra trong một thư mục nhất định hay ở mọi nơi? Có thể bạn đã vô tình che giấu một gói Python được xây dựng với một số mã của riêng bạn. –

Trả lời

7

Nếu thiết lập PATH="" sửa lỗi, sau đó một cái gì đó, ở đâu đó đang che khuất gói python đang được gọi bằng gói command-not-found. Gần đây tôi đã tự làm điều này bằng cách viết một tập lệnh có tên là struct.py. Bạn cần phải đi qua mọi thư mục trong đường dẫn của mình, tức là

/home/antonio/.local/bin 
/home/antonio/.local/bin 
/usr/local/sbin 
/usr/local/bin‌​ 
/usr/sbin 
/usr/bin 
/sbin 
/bin 
/usr/games 
/usr/local/games 

và tìm kiếm .py tệp ở đó. Một trong số họ chia sẻ một tên với một trong các gói Python dựng sẵn. Ngoài ra, bạn có thể xóa các thư mục khỏi số PATH và thêm lại các thư mục này cho đến khi bạn tìm ra thư mục nào sẽ phá vỡ thư mục đó. Một khi bạn tìm thấy nó, bạn cần phải xóa nó hoặc đổi tên nó.

Dưới đây là một vỏ một lót để làm điều đó cho bạn:

for dir in $(echo $PATH | tr ":" "\n"); do ls -1 $dir | grep "[.]py"; done 

Bạn có thể kiểm tra điều này trong vỏ của riêng bạn bằng cách thử như sau (tái sai lầm của tôi từ cách đây vài ngày):

echo 'print("HELLO WORLD")' >> struct.py 

Bây giờ trong vỏ của tôi, ở trong thư mục hiện hành, tôi thấy:

➜ client git:(master) ✗ a 
HELLO WORLD 
zsh: command not found: a 

có lẽ kịch bản Python là làm bóng trong trường hợp của bạn là làm một cái gì đó nhiều tài nguyên chuyên sâu hơn chỉ in "HELLO WORLD", do đó treo.

16

Bạn đang sử dụng máy ubuntu? Ubuntu có command-not-found package được triển khai trong python, bạn có thể đã làm gián đoạn điều đó.

Trong đường dẫn của bạn, có thể có một tập lệnh có cùng tên với tên được gọi là gói command-not-found. Nếu có, kịch bản này có khả năng là một trong những làm treo. Để in đường dẫn của bạn theo cách dễ đọc, hãy chạy echo $PATH | tr -s ':' '\n'.

+0

Vâng, đó là Ubuntu. Làm thế nào tôi có thể sửa nó? – AntonioRomero

+0

@AntonioRomero Tôi đồng ý câu trả lời của tôi không giải quyết việc treo. Đang điều tra khi chúng ta nói ... – EvenLisle

Các vấn đề liên quan