[英]Invoke copy & paste commands from terminal
是否可以從bash腳本調用復制命令(就像用戶按下Cmd + C一樣 )? 基本上,我想編寫一個使用全局熱鍵運行的簡單腳本,它應該從活動應用程序中獲取當前選擇,替換內容並粘貼結果。 這可能嗎?
到目前為止,我能想到的最好的方法是使用pbpaste
和pbcopy
,但是如果可能的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 text
並do shell script
將行結尾轉換為回車符。 shopt -u xpg_echo
是必需的,因為默認情況下sh
的echo
解釋單引號內的反斜杠。 如果輸入的長度大於getconf ARG_MAX
字節的長度,則不能使用echo
而必須將其寫入臨時文件或使用pbpaste
。
在do shell script
使用的環境中,默認情況下pbpaste
和pbcopy
用pbcopy
替換非ASCII字符。通過將LC_CTYPE
設置為UTF-8
可以防止這種情況。
告訴系統事件單擊菜單欄項通常會更慢,並且在沒有菜單欄或全屏窗口的應用程序中將無法使用。
另一種選擇是創建Automator服務。 但是它們在運行之前也有一些延遲。 有一個錯誤,即直到在菜單欄上顯示一次服務菜單后,服務的快捷方式才總是起作用。 當最前面的應用程序沒有菜單欄或服務菜單時,這些服務將不可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.