2013-11-15 4 views
11

volte sul mio terminale (Ubuntu) quando digitare:Dopo un tubo il comando viene considerato preceduti da uno spazio

ls | grep toto 

ottengo questo errore:

grep: command not found* 

noti che il guscio sta scrivendo grep preceduta da uno spazio. Come può essere possibile?

+0

È molto strano. Inoltre, tieni presente che puoi fare lo stesso con 'ls * toto *' – fedorqui

+1

Puoi riprodurlo in modo affidabile? È ls | grep qualcosa l'unica cosa sulla riga di comando? Sembra che ci sia una citazione da qualche parte, in fuga dallo spazio iniziale. – rbp

+0

È una specie di spazio bianco speciale? Spazio senza interruzioni, spazio ristretto, ecc. – knittl

risposta

24

< Controlla la source della tua domanda iniziale >

<pre style="width:650px; white-space:pre-wrap">Sometimes on my terminal (Ubuntu) when I type : 

ls |&#160;grep toto 

Grazie per la copia-incollare la linea reale! (Ma non hai copiato e incollato il messaggio di errore, sei stato cattivo!) Vedi il problema? Hai uno spazio infrangibile dopo il simbolo del tubo. Le conchiglie comprendono solo i caratteri ASCII; tutti i caratteri non ASCII, incluso U + 00A0 NO-BREAK SPACE, vengono considerati come componenti della parola, in modo che lo spazio indissolubile venga considerato come parte della parola che si trova nella posizione del nome del comando.

Stai presumibilmente utilizzando un layout di tastiera in cui è necessario tenere premuto AltGr digitare |. Assicurarsi di rilasciare il modificatore AltGr in modo da non digitare accidentalmente AltGr + Spazio invece di Spazio. Si noti che non è necessario uno spazio lì, è possibile digitare ls |grep toto se è più facile sulle dita.

+0

ben fatto, era il – user2854544

+0

Probabilmente il parser di Bash dovrebbe canonicizzare lo spazio non interrotto nello spazio normale. – tripleee

+0

@ triple Che sarebbe difficile: bash dovrebbe assumere che la codifica della stringa corrisponda alla codifica specificata dalle impostazioni locali, il che non è sempre il caso nella pratica e potrebbe rompere alcune applicazioni esistenti. – Gilles

5

Per completare la risposta di Gilles, è possibile disabilitare questo comportamento in Ubuntu/Gnome sostituendo il carattere dello spazio non interrompibile con lo spazio normale nelle impostazioni del layout della tastiera.

Impostazioni -> Tastiera -> Layout -> Opzioni, quindi selezionare "Utilizzo di chiave di spazio per inserire il carattere di spazio non interrompibile" e impostarlo su: "Spazio usuale a qualsiasi livello".

o dalla riga di comando

setxkbmap -option "nbsp:none" 

Ho trovato questa correzione in http://my.opera.com/nicomen/blog/unrecognized-character-xc2.

Questo era anche fastidioso per la tastiera francese per gli script Perl quando si utilizzavano parentesi graffe o in Python quando si utilizza il segno hash per i commenti seguito da uno spazio.

+0

Anche https://stackoverflow.com/questions/8694442/bash-piping-in-osx-prompts-command- non-trovato-a volte che ha una buona soluzione alternativa che non dipende da X. – tripleee