題:
有沒有辦法使粘貼到終端安全?
Abhi Beckert
2012-11-21 05:55:04 UTC
view on stackexchange narkive permalink

我總是將文件名/ etc粘貼到終端中,有時剪貼板的內容不是我期望的。

通常結果是幾百行文本(例如源代碼)粘貼到命令提示符中時,觸發上帝只​​會知道什麼麻煩。

有什麼方法可以防止bash盲目執行我粘貼的內容嗎?我希望它只是粘貼文本,然後讓我決定是否要執行它。

另請參閱[在終端應用程序中“將換行符粘貼為回車符”的目的是什麼?](https://apple.stackexchange.com/q/346381/19289)
我通常不會無意間將錯誤的內容粘貼到Terminal中……但是,天哪,這真是令人恐懼,它甚至在您的手指從Command-V鍵抬起之前已經執行了多行。SilverWolf的答案(從bash切換到zsh)是我在任何地方看到的最簡單的解決方案。
如果要切換外殼,請使用@Kal-試試fish“最後,是90年代的命令行外殼”。正確地處理多行粘貼只是魚中許多“ 90年代”功能之一...它使您可以粘貼多行,但在執行這批命令之前先按回車鍵。或者您可以ctrl-c。
八 答案:
nohillside
2012-11-21 12:30:46 UTC
view on stackexchange narkive permalink

假設您正在使用bash:如果使用 set -o emacs 激活emacs快捷方式,則也可以使用Emacs編輯命令行:

  • 鍵入 Ctrl-X kbd> Ctrl-E kbd>
  • 粘貼並編輯剪貼板內容到Emacs緩衝區中
  • 使用 Ctrl-X kbd> Ctrl-C kbd>退出Emacs並自動運行命令。
robmathers
2012-11-21 06:19:17 UTC
view on stackexchange narkive permalink

最簡單的解決方案可能是使用文本編輯器作為緩衝區,您可以在其中仔細檢查內容,然後從文本編輯器複製到終端。如果為此使用TextEdit,則可能要確保它處於純文本模式( Format 菜單→製作純文本;⇧⌘T),以避免出現類似問題鏈接粘貼為鏈接,而不是URL。

要注意的另一件事是Bash會嘗試執行換行符之前的所有內容,因此,如果要復製文本塊,則可能要確保您的選擇將在最後一個字符之後停止,而不是包括行尾。

您要的是:selection without newline

不是這樣的:selection with newline

當然,如果您要在文本中復制帶有換行符的內容( ie 多個段落),則需要手動編輯選擇內容。

問題是,我每天將東西粘貼到終端中數百次。在中間使用文本編輯器會很麻煩
攻擊者可以在文本中嵌入回車符而不會在屏幕上看到它們,因此,如何選擇文本的示例不一定提供任何保護。
SilverWolf - Reinstate Monica
2018-01-24 02:09:23 UTC
view on stackexchange narkive permalink

使用帶括號的粘貼

括號粘貼功能是一種功能,終端會告訴外殼程序您粘貼了某些內容,而不僅僅是鍵入內容,因此,只有按Enter鍵,外殼程序才能運行命令。

Terminal.app支持此功能,但並非所有終端都支持。

同樣,並非所有的shell都支持它。 OS X附帶的bash版本不支持帶括號的paste(在撰寫本文時為v3.2.57)。

但是,zsh確實支持帶括號的粘貼:

zsh-bracketed-paste

Zsh幾乎與bash兼容(除非您使用某種真正晦澀的功能,甚至腳本也可能會起作用),並且在許多方面都更好-例如,它甚至具有多行命令編輯功能!

zsh-multiline-command

如何激活帶括號的粘貼?
如果使用zsh,則默認情況下處於啟用狀態。嘗試粘貼一些單線!它應該像我的第一個屏幕截圖一樣反白顯示,如果您單擊Delete(刪除)一次,它將刪除整個內容。
我實際上是偶然發現它的,然後想知道為什麼它不流行。原來默認的bash確實很舊。(:
這太棒了!現在我問,為什麼我堅持使用bash這麼長時間?
ptim
2012-11-22 09:51:49 UTC
view on stackexchange narkive permalink

我也明白了!

我的解決方案是使用 Launchbar的剪貼板管理器和快捷鍵 Cmd + \ 進行粘貼。這將顯示最近剪輯的列表,使我可以在粘貼之前預覽結果:如果看不到預期的內容,請在發布Cmd之前先進行轉義。我還可以使用箭頭鍵“輸入”文本剪輯,使我可以逐行查看內容。

我相信大多數啟動器都可以這樣做-Alfred(powerpack插件)& Quicksilver(免費),例如。

Sigsegv
2012-11-29 03:36:32 UTC
view on stackexchange narkive permalink

您可能希望調查剪貼板管理器。我使用了一個重量輕,免費的輕量級產品 Jumpcut。它允許我保留多個剪貼板,並在實際粘貼內容之前查看其中存儲的內容,所有這些操作都可以通過鍵盤完成。

那裡有很多剪貼板管理器,因此,如果Jumpcut不會使您的船浮起,也許另外一個更適合您的需求

Joshua Goldberg
2020-01-15 21:03:46 UTC
view on stackexchange narkive permalink

首選項下->個人資料->基本版->高級, 選中“將換行符粘貼為回車符”。(基本名稱是一個配置文件的名稱。如果使用另一個配置文件,則應選擇該配置文件。)

some外殼程序中(zsh和bash對我有用,tcsh無效),這將使您(通過Ctrl-C)編輯或中止粘貼的內容,然後再將其任何部分傳遞給外殼。

您可能需要創建一個新的“終端”窗口以使首選項開始工作。

我一直使用此功能,不僅用於粘貼和編輯複雜的命令,而且還可以查看帶欄的文本,有時還可以通過使用選項鍵拖動來選擇和復制子矩形。

我剛剛了解到TextEdit也可以進行矩形選擇。
在bash中這對我不起作用。無論是否選中“將換行符粘貼為回車符”選項,粘貼時都會執行多行。
Gerry
2012-11-21 12:45:52 UTC
view on stackexchange narkive permalink

您可以將此小Bash腳本放在 PATH 中的某個位置:

 #!/ bin / bashread -p“確定要執行\` $(pbpaste)\ ??(Y / n)“ [[$ REPLY =〜^ [Yy]?$]] && pbpaste | bash  

例如,如果將這些內容放入 / usr / local / pbexecute 並使其可執行,則可以安全地執行 pbexecute 從命令行開始,這將在執行剪貼板內容之前提示我確認。

另一種方法是從外殼程序中啟動帶有剪貼板內容的文本編輯器,並自動執行編輯的內容。退出時的內容。例如:

 #!/ bin / bashPBTEMP = $(mktemp -t pbtemp)pbpaste > $ PBTEMPnano -t $ PBTEMPsource $ PBTEMPrm $ PBTEMP  
Aaron V
2020-05-05 02:00:30 UTC
view on stackexchange narkive permalink

如果您正在使用最新版本的bash(可能必須通過自製軟件安裝):

  1. 在您的〜/ .inputrc( source
  2. 中添加 set enable-bracketed-paste
  3. 在終端配置文件中啟用“將換行符粘貼為回車符” picture_of_terminal_profile_tab
  4. ol>


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...