2012-08-25 72 views
1

是否可以從bash腳本調用複製命令(就像用戶按下了命令 + C)?基本上我想編寫一個簡單的腳本,我使用全局熱鍵運行,它應該從當前的應用中選擇當前選擇,替換某些內容並粘貼結果。這可能嗎?從終端調用複製和粘貼命令

到目前爲止我所能找到的最好的方法是使用pbpastepbcopy,但是如果可能的話我想自動化。

+1

我會建議尋找服務來代替。服務旨在採用當前選擇並進行修改,並通過系統獲得熱鍵功能。 – ughoavgfhw

回答

1

如果你只是想修改文本選擇,你可以使用AppleScript。

osascript -e 'try 
    set old to the clipboard 
end try 
try 
    delay 0.3 
    tell application "System Events" to keystroke "c" using command down 
    delay 0.2 
    set text item delimiters to linefeed 
    set input to (paragraphs of (the clipboard as text)) as text 
    set the clipboard to do shell script "shopt -u xpg_echo; echo -n " & quoted form of input & " | rev" without altering line endings 
    tell application "System Events" to keystroke "v" using command down 
    delay 0.05 
end try 
try 
    set the clipboard to old 
end try' 

的第一延遲是如果腳本與具有比其他命令組合鍵快捷方式運行釋放修飾鍵。第二次延遲也可以減少到0.05,但長期選擇或例如網絡視圖往往需要更長的延遲。如果沒有第三次延遲,the clipboard有時會設置爲old,然後粘貼文本。

the clipboard as textdo shell script默認情況下會將換行符轉換爲回車符。 shopt -u xpg_echo是需要的,因爲默認情況下sh中的echo解釋單引號內的反斜槓。如果輸入長度超過getconf ARG_MAX字節,則不能使用echo,必須將其寫入臨時文件或使用pbpaste

pbpastepbcopy默認由do shell script使用可以防止通過設置LC_CTYPEUTF-8環境替換問號非ASCII字符。

告訴系統事件單擊菜單欄項通常會更慢,並且它不適用於沒有菜單欄或全屏窗口的應用程序。

另一種選擇是創建一個Automator服務。但他們在運行之前也有小的延遲。有一個錯誤,服務快捷方式在菜單欄上只顯示一次服務菜單後才能正常工作。當最前面的應用程序沒有菜單欄或服務菜單時,服務不可用。

+0

感謝這工作! – DrummerB