我總是將文件名/ etc粘貼到終端中,有時剪貼板的內容不是我期望的。
通常結果是幾百行文本(例如源代碼)粘貼到命令提示符中時,觸發上帝只會知道什麼麻煩。
有什麼方法可以防止bash盲目執行我粘貼的內容嗎?我希望它只是粘貼文本,然後讓我決定是否要執行它。
我總是將文件名/ etc粘貼到終端中,有時剪貼板的內容不是我期望的。
通常結果是幾百行文本(例如源代碼)粘貼到命令提示符中時,觸發上帝只會知道什麼麻煩。
有什麼方法可以防止bash盲目執行我粘貼的內容嗎?我希望它只是粘貼文本,然後讓我決定是否要執行它。
假設您正在使用bash:如果使用 set -o emacs
激活emacs快捷方式,則也可以使用Emacs編輯命令行:
最簡單的解決方案可能是使用文本編輯器作為緩衝區,您可以在其中仔細檢查內容,然後從文本編輯器複製到終端。如果為此使用TextEdit,則可能要確保它處於純文本模式( Format 菜單→製作純文本;⇧⌘T),以避免出現類似問題鏈接粘貼為鏈接,而不是URL。
要注意的另一件事是Bash會嘗試執行換行符之前的所有內容,因此,如果要復製文本塊,則可能要確保您的選擇將在最後一個字符之後停止,而不是包括行尾。
您要的是:
不是這樣的:
當然,如果您要在文本中復制帶有換行符的內容( ie 多個段落),則需要手動編輯選擇內容。
括號粘貼功能是一種功能,終端會告訴外殼程序您粘貼了某些內容,而不僅僅是鍵入內容,因此,只有按Enter鍵,外殼程序才能運行命令。
Terminal.app支持此功能,但並非所有終端都支持。
同樣,並非所有的shell都支持它。 OS X附帶的bash版本不支持帶括號的paste(在撰寫本文時為v3.2.57)。
但是,zsh確實支持帶括號的粘貼:
Zsh幾乎與bash兼容(除非您使用某種真正晦澀的功能,甚至腳本也可能會起作用),並且在許多方面都更好-例如,它甚至具有多行命令編輯功能!
我也明白了!
我的解決方案是使用 Launchbar的剪貼板管理器和快捷鍵 Cmd + \
進行粘貼。這將顯示最近剪輯的列表,使我可以在粘貼之前預覽結果:如果看不到預期的內容,請在發布Cmd之前先進行轉義。我還可以使用箭頭鍵“輸入”文本剪輯,使我可以逐行查看內容。
我相信大多數啟動器都可以這樣做-Alfred(powerpack插件)& Quicksilver(免費),例如。
您可能希望調查剪貼板管理器。我使用了一個重量輕,免費的輕量級產品 Jumpcut。它允許我保留多個剪貼板,並在實際粘貼內容之前查看其中存儲的內容,所有這些操作都可以通過鍵盤完成。
那裡有很多剪貼板管理器,因此,如果Jumpcut不會使您的船浮起,也許另外一個更適合您的需求
在首選項下->個人資料->基本版->高級
,
選中“將換行符粘貼為回車符”。(基本名稱是一個配置文件的名稱。如果使用另一個配置文件,則應選擇該配置文件。)
在some外殼程序中(zsh和bash對我有用,tcsh無效),這將使您(通過Ctrl-C)編輯或中止粘貼的內容,然後再將其任何部分傳遞給外殼。
您可能需要創建一個新的“終端”窗口以使首選項開始工作。
我一直使用此功能,不僅用於粘貼和編輯複雜的命令,而且還可以查看帶欄的文本,有時還可以通過使用選項鍵拖動來選擇和復制子矩形。
您可以將此小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
如果您正在使用最新版本的bash(可能必須通過自製軟件安裝):
set enable-bracketed-paste