无法获取osascript在我想要的位置打开多个终端选项卡

时间:2013-10-14 17:22:48

标签: macos osascript

我正在尝试编写一个脚本,该脚本将在终端上显示两个选项卡。我希望每个选项卡都有一个不同的日志文件。该脚本位于/ scripts目录中,日志位于父目录中。

第一个标签和尾部工作正常。第二个不是因为它在我的主目录中打开它。

这是脚本:

CURRENT_DIR=$(pwd);

# First tail
osascript -e 'tell application "Terminal" to activate' -e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' -e 'tell application "Terminal" to do script "cd ..;tail -f my.log" in selected tab of the front window';

# Second tail
cd $CURRENT_DIR;
osascript -e 'tell application "Terminal" to activate' -e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' -e 'tell application "Terminal" to do script "cd ..;tail -f mySecond.log" in selected tab of the front window';

第二个尾巴永远不会起作用,因为它打开了我的主目录中的标签,原因有些奇怪 通常当我执行cmd + t时,新的终端选项卡将在同一目录中打开。

关于我做错的任何想法?

2 个答案:

答案 0 :(得分:2)

我不会依赖这种行为。 “在同一目录中打开”技巧取决于shell更改终端窗口的标题栏,其中(a)并不总是在您期望它时发生,并且(b)如果除了shell之外的进程则中断本身决定修改标题栏。

在两种情况下,我都会谨慎行事并传递命令的完整路径,并使用on run机制将此路径作为命令行参数传递(这比尝试更简单,更安全如果路径可能包含空格,则获取正确的引号):

osascript -e 'on run argv' \
          -e '  tell application "Terminal" to do script "cd " & quoted form of item 1 of argv & " ; tail -f ../mySecond.log" in selected tab of the front window' \
          -e 'end run' \
          "$CURRENT_DIR"

这意味着您不关心该选项卡的“当前”目录是什么,tail将始终显示正确的文件。

答案 1 :(得分:0)

我这样做了:

pwd=`pwd`
osascript -e "tell application \"Terminal\"" \
    -e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
    -e "do script \"cd $pwd; tail -f my.log \" in front window" \
    -e "end tell"
    > /dev/null;

osascript -e "tell application \"Terminal\"" \
    -e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
    -e "do script \"cd $pwd; tail -f mySecond.log\" in front window" \
    -e "end tell"
    > /dev/null;