Bash: không thể gõ 'e' hoặc tôi sẽ lặp lại vô hạn 'H's


2

Tại nơi làm việc của tôi, có một số mạng độc lập mà tôi làm việc cùng, tất cả đều chạy các phiên bản khác nhau của RedHat Linux 4, 5 và 6.

Trên một trong những mạng đó, tôi không thể sử dụng bash (hoặc, như tôi đang tìm hiểu, bất cứ thứ gì sử dụng giao diện bash như python, gdb, v.v.) bởi vì khi tôi cố gắng gõ:

> exit

Tôi thay vào đó nhận được:

> HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH<control-C>

Cho đến khi tôi nhấn control-C (đối với bash hoặc gdb) hoặc, trong một thiết bị đầu cuối khác, hãy thực hiện một con trăn killall cho python.

Shell làm việc chính của tôi là tcsh, nhưng tôi sử dụng bash cho tất cả các kịch bản của mình. Đôi khi tôi cũng thả vào vỏ tương tác để thực hiện các vòng lặp đơn giản và tương tự. May mắn thay, 'thoát' là trong lịch sử của tôi vì vậy tôi có thể sử dụng mũi tên lên để lấy lại và thoát.

Chỉ cần rõ ràng: điều này chỉ xảy ra khi tôi chạy các chương trình này một cách tương tác. Không thành vấn đề nếu tôi khởi động trình bao:

> bash

> bash --login

> env bash --login

> env bash

Điều này xảy ra cho dù tôi có xóa các tệp bash_profile và bashrc của mình hay không. AFAIK, không có gì trong hồ sơ của hệ thống sẽ gây ra điều này.

Tôi hoàn toàn không biết làm thế nào để thậm chí đi tìm cái này! Tôi rất trân trọng sự giúp đỡ của bất kỳ ai có thể cung cấp!

TIA!


2
Có một số .inputrc có hiệu lực? Sử dụng bind -p tim ra. Làm reset Cứu giúp?
choroba

Phím "E" có hoạt động buồn cười trong bất kỳ chương trình nào khác không? Đây có phải là một bàn phím kỳ lạ, hoặc cài đặt vị trí? Trao đổi bàn phím với một máy khác có thay đổi gì không?
Xen2050

1
Bạn có thể "thoát" bằng cách nhấn mũi tên lên và tìm "thoát" trong lịch sử của mình, như bạn đã chỉ ra. Bạn cũng có thể thoát bằng cách nhấn EOF trên một dòng trống. Nhấn Ctrl-C (để nhanh chóng xóa dòng của bạn) và Ctrl-D. Điều này không giải quyết được vấn đề của bạn, nhưng nó sẽ giúp tăng tốc độ giải quyết của bạn và nói chung là rất tốt để biết.
TOOGAM

Bạn có phải là quản trị viên hệ thống? Bạn có thể cho biết liệu điều này xảy ra với tất cả người dùng, hoặc chỉ một? Điều này cũng ảnh hưởng đến các shell khác (sh, dash, zsh, v.v.
TOOGAM

@ Xen2050: Nó không hoạt động hài hước trong bất kỳ chương trình nào khác. Một điều nữa tôi quên đề cập đến là tôi đã sử dụng máy Windows (ick) bằng X-Win để kết nối với máy Linux. Shell chính của tôi, trình gỡ lỗi intel, nedit, kate, v.v ... đều ổn - chỉ một vài thứ đã bị hỏng. Trong môi trường đặc biệt này, trao đổi bàn phím là ... không khả thi.
iAdjunct

Câu trả lời:


4

Vì vậy, với sự giúp đỡ của một gợi ý từ choroba, tôi đã tìm ra nó.

Trong môi trường này, họ có chính sách ngu ngốc gần như buộc mọi người phải cung cấp tất cả các tệp tài nguyên giống nhau ngoài cấu hình của riêng họ. Một ngày nọ, họ đã thay đổi một cái gì đó và phá vỡ một nửa số vỏ của chúng tôi.

Trong quá trình cố gắng khắc phục điều này, tôi đặt các câu lệnh in trong các hồ sơ và tệp tài nguyên khác nhau để tôi có thể thấy những cái nào thậm chí đang được chạy để theo dõi lý do tại sao mọi thứ bị hỏng.

Tôi đã không nhận ra rằng, không giống như mọi tệp khác kết thúc bằng 'RC', '.inputrc' không nhận được CHẠY, nó được PARSED. Và nó được phân tích cú pháp một cách kỳ lạ. Vì vậy, tôi đã có cái này trong .inputrc:

echo "Hello..."

Mà bằng cách nào đó đã được giải thích bởi hệ thống ràng buộc (dường như chỉ bash, gdb, python và có thể một số thứ khác tôi chưa sử dụng thực sự nhìn vào) là 'khi người dùng gõ e, in H vô hạn'. Đó rõ ràng là những gì tôi có nghĩa.

Bây giờ tôi có một bash chức năng, python và gdb! Cảm ơn bạn!


Rõ ràng nó ràng buộc "e" với "Xin chào ...", nhưng tất nhiên chữ cái thứ hai là "e", vì vậy nó được chuyển thành "Xin chào ...", và sau đó nó cứ lặp đi lặp lại. Hãy thử chạy bind 'z "1234 z"', sau đó nhấn "z" và xem niềm vui.
Gordon Davisson

À! Giải thích nó!
iAdjunct

3

hack nhanh

$ i () { printf "%x" 14;}

hoặc là

$ i () { printf \\x65;}
$ l`i`ss
Missing filename ("less --help" for help)
$ `i`xit

một vụ hack khác,

$ E^b^[l

Điều này làm cho E thấp hơn.

Điều này có thể giúp,

$ bind -m `i`macs

Điều này đã được hạ xuống -1. Mặc dù điều này không trả lời câu hỏi, tôi nhận ra đây là một cách giải quyết có thể hữu ích. Định dạng cũng làm cho nó đủ dài để nó có thể không dễ dàng phù hợp với một nhận xét. Tôi ủng hộ điều này như là một đóng góp hữu ích. Tôi sẽ thêm rằng $ (và) có thể được sử dụng thay cho dấu ngoặc kép và có thể dễ dàng lồng nhau hơn. Mặc dù, giống như nhận xét trước đây của tôi, cách tiếp cận này thực sự chưa trả lời được câu hỏi chính, tại sao iAdjunc thậm chí còn gặp phải sự cố ngay từ đầu hoặc cách khắc phục đúng. Câu trả lời đó vẫn được tìm kiếm.
TOOGAM

Đây hoàn toàn có thể là điều vui nhộn nhất tôi từng đọc trên trao đổi ngăn xếp. Tôi thực sự phá lên cười. Sau đó tôi chỉ cho một đồng nghiệp / bạn bè và anh ta phá lên cười. Sau đó, tôi chỉ cho một đồng nghiệp / bạn bè khác (người đã từng hoàn toàn lạm dụng cú pháp để thực hiện những hành động đê tiện) và anh ta nhìn tôi như "ồ không."
iAdjunct

Điều này thực sự hữu ích: Tôi thực sự có thể chọc vào bash vì điều này.
iAdjunct
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.