貼上指令時停止終端自動執行

貼上指令時停止終端自動執行

是的,這是一個有點煩人的功能,因為有時會發生這種情況,有時則不會,非常奇怪。

我將命令貼到終端機中,以調整其參數,並且有時它在我貼上它的第二次執行。有時則不然。

這包括從尷尬(在 IRC 上發布無意義的評論)到危險。

如何永久關閉此功能?我永遠、永遠、永遠不希望終端機在貼到終端機時自動執行。

答案1

沒有自動執行。您可能會在命令後複製換行符(或更多)。

如果您貼上命令中斷,shell(命令列)認為您自己按下了中斷(Enter、Return)按鈕。


這個答案只解釋了為什麼 OP 會出現不良行為。然而,在另一個答案,有一個真正的解決方案OP的問題。

答案2

真實的解決方案是開啟編輯模式,ctrl-x ctrl-e然後將剪貼簿安全地貼上到您選擇的編輯器(通常是 emacs 或 vim)中。編輯完命令後,儲存並退出,它將在命令列中運行。對於長命令或複雜命令來說,這是一個好習慣,尤其是在將提交雜湊值貼到 git 命令中時,從長遠來看,可以幫助您避免一些可怕的結果。

可以透過設定 VISUAL 和 EDITOR 變數來更改編輯器(這些變數具有不同的意義,請參閱這裡)。

答案3

正如其他人所提到的,當貼上的文字包含換行符時就會出現問題。有了這些知識,你的問題或多或少與這是關於伺服器故障的。不同的網站,所以我會在這裡重複我的答案...

你想要的叫做'括號內的貼上',某些 shell 中提供了該功能。

假設您使用的是最新版本的 bash shell,您可以在目前會話中開啟它,如下所示:

bind 'set enable-bracketed-paste on'

現在透過貼上多行來嘗試:

echo Hello world
echo Again, I say, hello!

shell 辨識出文字已貼上(而非鍵入),並等待提示您進行確認。如果一切看起來可以安全繼續,請按 Enter 鍵。如果沒有,請按 Control-C 取消。

如果您想要為每個新會話啟用括號貼上,請將命令新增至您的 .inputrc 檔案:

cd ~
echo "set enable-bracketed-paste" >> .inputrc

另一個選擇是從巴什桀騁,其中預設啟用括號貼上。若要將目前 shell 替換為 zsh shell:

exec zsh

使用 zsh,貼上的文字會突出顯示,這很好。再按 Enter 執行指令或按 Control-C 取消。

如果您喜歡 zsh,並希望將其設為預設 shell:

chsh -s /bin/zsh

答案4

我使用此別名進行貼上並讓我的命令不執行

alias nonewlinepaste='history -s `xsel -b`; sleep 1; xdotool key Up 1>/dev/null'  # xsel ref. https://unix.stackexchange.com/a/96398/17671  # xdotool ref. https://unix.stackexchange.com/questions/267704/command-to-simulate-keyboard-input#comment1038650_267705

相關內容