簡體   English   中英

從終端調用復制和粘貼命令

[英]Invoke copy & paste commands from terminal

是否可以從bash腳本調用復制命令(就像用戶按下Cmd + C一樣 )? 基本上,我想編寫一個使用全局熱鍵運行的簡單腳本,它應該從活動應用程序中獲取當前選擇,替換內容並粘貼結果。 這可能嗎?

到目前為止,我能想到的最好的方法是使用pbpastepbcopy ,但是如果可能的pbcopy ,我想使其自動化。

如果您只是嘗試修改文本選擇,則可以使用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,但是長時間選擇或例如Web視圖通常需要更長的延遲。 沒有第三次延遲, the clipboard有時會設置為old然后粘貼文本。

默認情況下the clipboard as textdo shell script將行結尾轉換為回車符。 shopt -u xpg_echo是必需的,因為默認情況下shecho解釋單引號內的反斜杠。 如果輸入的長度大於getconf ARG_MAX字節的長度,則不能使用echo而必須將其寫入臨時文件或使用pbpaste

do shell script使用的環境中,默認情況下pbpastepbcopypbcopy替換非ASCII字符。通過將LC_CTYPE設置為UTF-8可以防止這種情況。

告訴系統事件單擊菜單欄項通常會更慢,並且在沒有菜單欄或全屏窗口的應用程序中將無法使用。

另一種選擇是創建Automator服務。 但是它們在運行之前也有一些延遲。 有一個錯誤,即直到在菜單欄上顯示一次服務菜單后,服務的快捷方式才總是起作用。 當最前面的應用程序沒有菜單欄或服務菜單時,這些服務將不可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM