我想知道如何启动一个全新的Chrome实例(请参阅下面的脚本),该实例将被带到前面。目前,shell脚本在后台打开新的Chrome实例,这不是最佳选择。从Applescript执行shell脚本没有任何补救措施。
有趣的是,如果我直接从AppleScript使用shell命令打开Chrome,它似乎在前台打开:
set q to "'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' --user-data-dir=/tmp/1234"
do shell script q
AppleScript的
do shell script "~/bin/chrome-fresh"
Shell脚本
#!/bin/sh
# This is quite useful for front-enders, as it will launch a fresh
# Chrome instance with no loaded plugins or extensions that messes
# with your performance profiling or network debugging
#
# Install:
# install -m 555 ~/Downloads/chrome-fresh /usr/local/bin/
CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
ARGS="$@"
# make a fresh user directory
TMP_USERDIR=$(mktemp -d);
# avoid the dialog on the first startup
touch "$TMP_USERDIR/First Run";
# start chrome using a fresh user directory
"$CHROME" --user-data-dir="$TMP_USERDIR" "$ARGS"
答案 0 :(得分:2)
在后台运行命令(将$!
放在命令的末尾。)
使用# start chrome using a fresh user directory
"$CHROME" --activate-on-launch --user-data-dir="$TMP_USERDIR" "$ARGS" &
chromePid=$!
sleep 2
# bring Chrome
osascript -e 'tell application "System Events"' -e "tell (first process whose its unix id is \"$chromePid\" ) to set frontmost to true" -e 'end tell'
获取最后一个命令的进程ID
<Dictionary
x:TypeArguments="x:String, x:Object"
xmlns="clr-namespace:System.Collections.Generic;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<List x:TypeArguments="x:Int32" x:Key="key" Capacity="4">
<x:Int32>60371408</x:Int32>
<x:Int32>60371409</x:Int32>
</List>
</Dictionary>
答案 1 :(得分:1)
在下面的脚本中,我使用了Applescript和Shell命令的混合。我不是壳牌专家,所以可能有最有效的方法来做到这一点。至少,这个脚本正在运行:
1)它需要包含特定名称的所有流程(即= Chrome)
2)它遍历所有找到的进程,并为每个进程获得自开始使用&#34; ps&#34; shell命令。
3)它将该时间与之前发现的时间进行比较,如果低于此时间则保留过程信息。最低时间值链接到流程的最后一个启动实例。
4)自启动以来时间最短的进程是最后一个:它将最前面的属性设置为true以使其成为前景。
O(t+klogk)
我发表了几条评论,明确了&#34; ps&#34;命令。如果有人知道如何从ps输出直接获得秒,谢谢。 (我很确定应该有一种最简单的方法!)