Bash: non è possibile digitare 'e' o I'll get infinitamente ripetendo 'H's


2

Sul mio posto di lavoro, ci sono diverse reti indipendenti con cui lavoro, tutte con varie versioni di RedHat Linux 4, 5 e 6.

Su una di queste reti, non posso usare bash (o, come sto scoprendo, tutto ciò che usa il front-end bash come python, gdb, ecc.) Perché quando provo a digitare questo:

> exit

Io invece ottengo:

> HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH<control-C>

Fino a quando non premo control-C (per bash o gdb) o, in un altro terminale, eseguo un killall python per python.

La mia shell di lavoro principale è tcsh, ma io uso bash per tutti i miei scripting. Anch'io passo a galla nella shell a volte in modo interattivo per fare loop semplici e simili. Fortunatamente, "exit" è nella mia cronologia, quindi posso usare la freccia su per riaverla e uscire.

Giusto per essere chiari: questo accade solo quando eseguo questi programmi in modo interattivo. Non importa se ho iniziato la shell:

> bash

> bash --login

> env bash --login

> env bash

Ciò accade se rimuovo i miei file bash_profile e bashrc o meno. AFAIK, non c'è nulla nel profilo del sistema che causerebbe questo.

Sono completamente incapace di sapere come andarlo a trovare! Apprezzerei GRANDE qualsiasi aiuto che qualcuno possa offrire!

TIA!


2
Ce ne sono alcuni .inputrc in effetti? Uso bind -p per scoprirlo. fa reset Aiuto?
choroba

Il tasto "E" è divertente in qualsiasi altro programma? È una tastiera bizzarra o impostazione della posizione? Lo scambio di tastiere con una macchina diversa cambia qualcosa?
Xen2050

1
Puoi "uscire" premendo la freccia su e trovando "esci" nella cronologia, come fai notare. Puoi anche uscire premendo EOF su una riga vuota. Premi Ctrl-C (per oscurare rapidamente la tua linea) e Ctrl-D. Questo non risolve il tuo problema, ma ti aiuterà a velocizzare la tua soluzione ed è generalmente piacevole da conoscere.
TOOGAM

Sei un amministratore di sistema? Puoi dire se questo succede a tutti gli utenti, o solo a uno? Questo influisce anche su altre shell (sh, dash, zsh, ecc .--- forse prova cosa c'è in / etc / shells) Questo succede se esegui bash da xterm?
TOOGAM

@ Xen2050: Non ha funzionato in modo divertente in nessun altro programma. Un'altra cosa che ho dimenticato di menzionare è che ero su una macchina Windows (ick) usando X-Win per connettermi alla macchina Linux. La mia shell principale, il debugger intel, nedit, kate, ecc. Andava tutto bene, solo alcune cose erano rotte. In questo particolare ambiente, lo scambio di tastiere è ... non fattibile.
iAdjunct

Risposte:


4

Quindi, con l'aiuto di un suggerimento da parte di Choroba, l'ho capito.

In questo ambiente, hanno la politica idiota di quasi forzare tutti a procurarsi tutti gli stessi file di risorse oltre alla propria configurazione. Un giorno, hanno cambiato qualcosa e hanno rotto metà dei nostri proiettili.

Durante il tentativo di risolvere questo problema, ho inserito le istruzioni di stampa nei vari profili e file di risorse in modo che potessi vedere quali sono stati persino eseguiti per rintracciare le cause della rottura.

Non mi rendevo conto che, a differenza di ogni altro file che termina con 'rc', il '.inputrc' non ottiene RUN, diventa PARSED. E viene analizzato in modo strano. Quindi, ho avuto questo in .inputrc:

echo "Hello..."

Che in qualche modo sono stati interpretati dal sistema di bind (che a quanto pare solo bash, gdb, python e forse anche altre cose che non avevo ancora usato in realtà) come 'quando l'utente digita e, stampa H all'infinito'. Che è chiaramente ciò che intendevo.

Ora ho un bash funzionale, python e gdb! Grazie!


A quanto pare è vincolante "e" a "Ciao ...", ma ovviamente la seconda lettera è "e", quindi viene trasformata in "Ciao ...", e poi continua a farlo più e più volte. Prova a correre bind 'z "1234 z"', quindi premi "z" e guarda il divertimento.
Gordon Davisson

Ahhhhh! Questo lo spiega!
iAdjunct

3

un trucco veloce,

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

o

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

un altro trucco,

$ E^b^[l

Questo rende E più basso.

Questo potrebbe aiutare,

$ bind -m `i`macs

Questo è stato downsoted a -1. Sebbene questo non risponda alla domanda, riconosco che è una soluzione che può essere utile. Anche la formattazione lo rende abbastanza lungo da non poter essere facilmente inserito in un commento. Ho aumentato questo risultato come un utile contributo. Aggiungerò che $ (e) può essere usato al posto delle virgolette e può essere più facilmente nidificabile. Anche se, come il mio precedente commento, questo approccio in realtà non ha risposto alla domanda chiave, del perché in primo luogo iAdjunct sta già riscontrando il problema o su come correggerlo correttamente. Questa risposta è ancora ricercata.
TOOGAM

Questa è probabilmente la cosa più esilarante che abbia mai letto sullo stack-exchange. Mi sono letteralmente scoppiato a ridere. Poi ho mostrato un collega / amico e lui è scoppiato a ridere. Poi ho mostrato un altro collega / amico (che è abituato ad abusare totalmente della sintassi per fare atti vili) e mi ha guardato come "oh no".
iAdjunct

Questo in realtà è stato utile: sono stato davvero in grado di colpire in giro a causa di questo.
iAdjunct
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.