在管道之后,该命令被视为以空格为前缀

时间:2013-11-15 11:10:00

标签: bash ubuntu grep pipe

当我输入时,有时在我的终端(Ubuntu)上:

ls | grep toto

我收到此错误:

 grep: command not found*

请注意,shell正在编写以空格为前缀的grep。 这怎么可能?

2 个答案:

答案 0 :(得分:25)

<检查原始问题的source>

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

ls |&#160;grep toto

感谢您复制粘贴实际行! (但你没有复制粘贴错误信息,顽皮的你!)看到问题?管道符号后面有一个牢不可破的空间。炮弹只能理解ASCII字符;所有非ASCII字符,包括U + 00A0 NO-BREAK SPACE,都被视为单词构成,因此牢不可破的空格被视为命令名称位置中单词的一部分。

您可能使用键盘布局,您需要按住 AltGr 键入|。确保释放 AltGr 修饰符,以免意外键入 AltGr + Space 而不是 Space 。请注意,您不需要空格,如果您的手指更容易,则可以输入ls |grep toto

答案 1 :(得分:5)

要完成Gilles的回答,您可以在Ubuntu / Gnome中通过键盘布局设置中的常用空格替换不可破坏的空格字符来禁用此行为。

设置 - &gt;键盘 - &gt;布局 - &gt;选项,然后选择“使用空格键输入不可破坏的空格字符”并将其设置为:“任何级别的常用空间”。

或者从命令行

setxkbmap -option "nbsp:none"

我在http://my.opera.com/nicomen/blog/unrecognized-character-xc2中找到了此修复程序。

在使用大括号脚本的法语键盘上,当使用大括号时,或者在使用散列符号进行注释后跟空格时,这也很烦人。