是的,這是一個有點煩人的功能,因為有時會發生這種情況,有時則不會,非常奇怪。
我將命令貼到終端機中,以調整其參數,並且有時它在我貼上它的第二次執行。有時則不然。
這包括從尷尬(在 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