\当我输入时,我无法让终端 shell 接受它。什么都没有发生。我已经用 Google 搜索过,但没有找到任何可以解决这个问题的方法。我不知道从哪里开始解决问题。
编辑:
我可以在 eclipse 和任何文本编辑器(包括 nano 或其他命令行工具)中使用 \。具体命令如下:
find -type f -exec chmod -x {} \;
如果我复制并粘贴该行,该\
字符就会消失。如果我尝试输入该字符,则不会发生任何反应。
唯一存在问题的地方是在实际的 shell 命令行中。
谢谢。
编辑二:
似乎有些混乱。如果我将上述命令复制到命令行,无需按 Enter 键(即不执行),我的 shell 中的内容如下:
$find -type f -exec chmod -x {} ;
如果我尝试输入 a\
来转义,则;
符号不会出现。如果在上述情况下输入此命令时随时按下回车键,则由于 ; 未传递到命令中,因此无法执行。
编辑3:
我在 Ubuntu 12.04 LTS 上使用 GNOME 3.4.1.1
答案1
一种可能性是反斜杠键已绑定到某些 readline 命令(readline
是允许现场编辑 shell 命令的库,例如将Ctrl+绑定h到backward-delete-char
操作)。
为了测试是否是这种情况,你可以尝试启动一个 bash 子 shell 并禁用 readline 编辑
bash --noediting
如果反斜杠键在该子 shell 中有效,则查找恶意键绑定定义的位置将是/etc/inputrc
全局配置和~/.inputrc
每个用户配置。您还可以尝试使用以下命令从命令行打印并搜索当前定义的键绑定
bind -P | grep '\\\\'
需要额外的反斜杠,因为文字反斜杠将在 readline 配置中显示为\\
,每个反斜杠在 shell 中都需要进一步转义。显然,如果反斜杠在常规 shell 中绑定,则只能在子 shell 中执行此操作。
仅供参考,有一个bind
命令选项可以删除绑定,但不清楚keyseq
当它已经绑定时如何输入参数
-r keyseq Remove the binding for KEYSEQ.
有关更多信息,请参阅help bind
bash 命令行
答案2
\
转义其后的所有字符。;
明确结束命令。\;
表示转义;
并将其传递给您在 find 中调用的命令(之后的所有内容-exec
。使用 \ 分号适用于,chmod
而如果没有 \ 分号将适用于find
。
您的终端确实识别\
。当您在终端中键入它时,您会告诉终端转义下一个字符 - 您没有提供该字符。
如果要将 \ 显示为字符,请将其转义。输入\\
。
答案3
不知道这是否是您的情况的根本原因,但我可以通过输入以下命令来重现类似的行为:
stty eof \\
可以使用以下方法纠正:
stty sane
您可能想尝试后一个命令来看看是否能解决您的问题。
答案4
我正在使用“macBook Air”2015,使用“Parallels 11”和虚拟机“Ubuntu”。我的键盘是“精简版”Apple 无线键盘。我在菜单中选择了“French Macintosh”(因为我是法国人...!)作为键盘,但在 Ubuntu 的终端中,最初我无法输入“\”或“|”。因此,我转到“Paramètres Système”、“Saisie de texte”(“文本输入”?)并单击窗口右下角的按钮“Paramètres du clavier”(键盘参数)。在第二个新窗口中,我选择“Saisie”(“输入”?),然后选择行“Touche de caractères alternatifs”(“替代字符键”?);现在单击该行的右端,可以从许多特殊键中进行选择... 在我的情况下,最初没有定义任何键,我选择了“Alt Left”来模拟 Mac OS X 下的正常操作。解释起来很长,但做起来又快又容易! Guy de Pernon