2016-07-17 44 views
0

我是新來的bash。 我試試這個命令來查找當前路徑下的文件夾:

$ ls -F | grep "/" 

但有時我會鍵入錯誤,如grep「\」,它會跟隨無限「>」。 在這種情況下,我可以輸入所有內容,如':',w,q,...但只是文本,我無法輸入其他命令。 看起來是這樣的:

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

任何人都可以告訴我怎麼去從這些可怕的「>」走? 謝謝你救了我

回答

0

嘗試按Ctrl +d這將signal the end of input
(也稱爲「end of transmission」)

這樣,您可以恢復您的bash會話。

在你的情況,如Gordon Davisson提到下面,按Ctrl +ç我們足夠。

我已經測試了在GNU的bash,版本46年3月4日(2)-release下(x86_64-PC-MSYS)(從最新的git 2.9.2)

  • 按Ctrl +顯示

    bash: unexpected EOF while looking for matching `"' 
    
  • 按Ctrl +çW¯¯後的C將返回慶典(沒有註銷)生病立即返回到bash。

+0

哇,謝謝!它真棒而有趣! – AHao

+0

Control-C會更好。在許多情況下,Control-D將結束shell會話,而Control-C更通用「oops,取消」。 –

+0

@GordonDavisson謝謝。我已將您的評論納入答案以獲得更多可見性,並對兩種組合進行了測試。 – VonC

0

在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 

完成命令提供缺少的結束雙引號 (轉義這一次!)。 triplee

雖然前面的例子中完成它實際上告訴grep來搜索一個雙引號(")的命令。要指示grep來搜索一個反斜槓(我相信最初的目的),那麼\將需要進行轉義三次(允許它在雙引號內工作):

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

如果沒有逃過正常,你很可能會得到一個錯誤grep: Trailing backslash。當然,還有其他方法可以實現這一點,儘管這可能有助於您理解手頭的問題。

+0

因此,爲了「逃避」,提供缺少的結束雙引號(這段時間未轉義!) – tripleee

+0

@tripleee:您的評論讓我的腦袋旋轉了一分鐘!是的,如果想逃避一個雙引號,那麼「提供缺少的雙引號(這次沒有轉義!)」 - 然後完成命令。如果想逃避一個反斜槓,那麼它需要被轉義3倍或完全以另一種方式完成。 –

+0

謝謝,它真的幫助我瞭解它是如何發生的以及如何將其應用於其他問題 – AHao