2013-11-15 75 views
11

有時我的終端(Ubuntu的)上後:當我輸入管道命令被認爲與空間前綴

ls | grep toto 

我得到這個錯誤:

grep: command not found* 

注意,外殼是寫grep以空格爲前綴。 這怎麼可能?

+0

這很奇怪。另外,請注意,您可以使用'ls * toto *'' – fedorqui

+1

做同樣的事情您能否可靠地重現它?是ls | grep的東西在命令行上唯一的東西?這看起來像是在某處引用了一個引號,從而避開了最初的空間。 – rbp

+0

這是某種特殊的空白嗎?非破壞性空間,狹窄的空間等。 – knittl

回答

24

<檢查你原來的問題的source >

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

ls |&#160;grep toto 

感謝您的複製粘貼實際線! (但你沒有複製粘貼錯誤信息,調皮你!)看到問題了嗎?管道符號後面有一個牢不可破的空間。殼只理解ASCII字符;包括U + 00A0 NO-BREAK SPACE在內的所有非ASCII字符都被視爲單詞組成部分,以便將不可破壞的空格視爲命令名稱位置中的單詞的一部分。

你大概使用鍵盤佈局,你需要按住AltGr鍵入|。確保釋放的AltGr修改,以免意外鍵入的AltGr + 空間,而不是空間。請注意,您不需要空間,如果您的手指更容易打字,則可以輸入ls |grep toto

+0

做得好,就是它 – user2854544

+0

可以說,Bash的解析器應該將non-breaking空間規範化爲常規空間。 – tripleee

+0

@tripleee這將是棘手的:bash將不得不假定字符串的編碼與區域設置指定的編碼相匹配,實踐中並非總是如此,並且會破壞一些現有的應用程序。 – Gilles

5

要完成Gilles的回答,您可以在Ubuntu/Gnome中禁用此行爲,方法是用鍵盤佈局設置中的常用空格替換不可破壞的空格字符。

設置 - >鍵盤 - >佈局 - >選項,並選擇「使用空格鍵輸入不可破壞的空格字符」並將其設置爲:「任何級別的通常空間」。

,或者在命令行

setxkbmap -option "nbsp:none" 

http://my.opera.com/nicomen/blog/unrecognized-character-xc2發現此修復程序。

在使用大括號時,這在法語鍵盤上對於使用大括號的Python腳本也很煩人,或者在使用散列符號註釋後跟空格的時候,這也是令人討厭的。

+0

另外https://stackoverflow.com/questions/8694442/bash-piping-in-osx-prompts-command-沒有找到 - 有時它有一個很好的替代解決方法,它不依賴於X. – tripleee