2012-08-25 59 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