有時我的終端(Ubuntu的)上後:當我輸入管道命令被認爲與空間前綴
ls | grep toto
我得到這個錯誤:
grep: command not found*
注意,外殼是寫grep以空格爲前綴。 這怎麼可能?
有時我的終端(Ubuntu的)上後:當我輸入管道命令被認爲與空間前綴
ls | grep toto
我得到這個錯誤:
grep: command not found*
注意,外殼是寫grep以空格爲前綴。 這怎麼可能?
<檢查你原來的問題的source >
<pre style="width:650px; white-space:pre-wrap">Sometimes on my terminal (Ubuntu) when I type : ls | grep toto
感謝您的複製粘貼實際線! (但你沒有複製粘貼錯誤信息,調皮你!)看到問題了嗎?管道符號後面有一個牢不可破的空間。殼只理解ASCII字符;包括U + 00A0 NO-BREAK SPACE在內的所有非ASCII字符都被視爲單詞組成部分,以便將不可破壞的空格視爲命令名稱位置中的單詞的一部分。
你大概使用鍵盤佈局,你需要按住AltGr鍵入|
。確保釋放的AltGr修改,以免意外鍵入的AltGr + 空間,而不是空間。請注意,您不需要空間,如果您的手指更容易打字,則可以輸入ls |grep toto
。
做得好,就是它 – user2854544
可以說,Bash的解析器應該將non-breaking空間規範化爲常規空間。 – tripleee
@tripleee這將是棘手的:bash將不得不假定字符串的編碼與區域設置指定的編碼相匹配,實踐中並非總是如此,並且會破壞一些現有的應用程序。 – Gilles
要完成Gilles的回答,您可以在Ubuntu/Gnome中禁用此行爲,方法是用鍵盤佈局設置中的常用空格替換不可破壞的空格字符。
設置 - >鍵盤 - >佈局 - >選項,並選擇「使用空格鍵輸入不可破壞的空格字符」並將其設置爲:「任何級別的通常空間」。
,或者在命令行
setxkbmap -option "nbsp:none"
我http://my.opera.com/nicomen/blog/unrecognized-character-xc2發現此修復程序。
在使用大括號時,這在法語鍵盤上對於使用大括號的Python腳本也很煩人,或者在使用散列符號註釋後跟空格的時候,這也是令人討厭的。
另外https://stackoverflow.com/questions/8694442/bash-piping-in-osx-prompts-command-沒有找到 - 有時它有一個很好的替代解決方法,它不依賴於X. – tripleee
這很奇怪。另外,請注意,您可以使用'ls * toto *'' – fedorqui
做同樣的事情您能否可靠地重現它?是ls | grep的東西在命令行上唯一的東西?這看起來像是在某處引用了一個引號,從而避開了最初的空間。 – rbp
這是某種特殊的空白嗎?非破壞性空間,狹窄的空間等。 – knittl