【问题标题】:could not continue after using command [$ls -f]使用命令 [$ls -f] 后无法继续
【发布时间】:2016-11-19 23:46:26
【问题描述】:

我是 bash 的新手。 我尝试使用此命令在当前路径下查找文件夹:

$ ls -F | grep "/"

但有时我会输入错误,例如 grep"\",它会跟随无限">"。 在这种情况下,我可以输入像 ':',w,q,... 这样的所有内容,但只是文本,我不能输入其他命令。 看起来像这样:

$ ls -F | grep"\"
>
>:wq
>exit
>blablabla
>

谁能告诉我如何摆脱这些可怕的“>”? 谢谢你救了我

【问题讨论】:

    标签: bash git-bash


    【解决方案1】:

    试试 Ctrl+D 那会signal the end of input
    (也称为“end of transmission”)

    这样,您可以恢复您的 bash 会话。

    在你的情况下,正如Gordon Davisson 下面提到的那样,Ctrl+C 我们就够了。

    我已经在 GNU bash 版本 4.3.46(2)-release (x86_64-pc-msys) 中进行了测试(来自最新的 git 2.9.2)

    • Ctrl+C显示后会返回bash(不注销)

      bash: unexpected EOF while looking for matching `"'
      
    • Ctrl+C 将立即返回 bash。

    【讨论】:

    • Control-C 会更好。在许多情况下,Control-D 将结束 shell 会话,而 Control-C 更通用的是“哎呀,取消那个”。
    • @GordonDavisson 谢谢。我已将您的评论包含在答案中以获得更多可见性,并测试了这两种组合。
    【解决方案2】:

    在 bash 中使用反斜杠通常会转义后面的字符。

    $ echo "\" # this escapes the last double quote but does not complete the command
    

    因此 grep 认为命令不完整并继续允许输入 >

    $ echo "back\slash" | grep "\"" # notice there is a second trailing double quote
    

    要完成命令,请提供缺少的右双引号 (这次没有转义!)。三元组

    虽然前面的示例完成了命令,但它实际上是告诉 grep 搜索双引号 (")。要指示 grep 搜索反斜杠(我相信这是最初的意图),则需要将 \ 转义 3 次(允许它在双引号内工作):

    $ echo "back\slash" | grep "\\\\"
    

    如果没有正确转义,您可能会收到错误grep: Trailing backslash。当然还有其他方法可以做到这一点,尽管这可能有助于您理解手头的问题。

    【讨论】:

    • 所以要“转义”,请提供缺少的右双引号(这次没有转义!)
    • @tripleee:你的评论让我头晕了一分钟!是的,如果想要转义双引号,那么“提供缺少的右双引号(这次没有转义!)”——这反过来完成了命令。如果想转义反斜杠,则需要转义 3x 或完全以其他方式完成。
    • 谢谢,这真的帮助我了解它是如何发生的以及如何在其他问题中应用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 2011-02-09
    • 2011-10-30
    • 2014-12-22
    相关资源
    最近更新 更多