Macos 无法让osascript在我希望的位置打开多个终端选项卡

Macos 无法让osascript在我希望的位置打开多个终端选项卡,macos,osascript,Macos,Osascript,我正在尝试编写一个脚本,它将在终端上显示两个选项卡。我希望每个选项卡都有一个不同的日志文件。脚本位于/scripts目录中,日志位于父目录中 第一个选项卡和尾部工作正常。第二个没有,因为它在我的主目录中打开它 以下是脚本: CURRENT_DIR=$(pwd); # First tail osascript -e 'tell application "Terminal" to activate' -e 'tell application "System Events" to tell proc

我正在尝试编写一个脚本,它将在终端上显示两个选项卡。我希望每个选项卡都有一个不同的日志文件。脚本位于/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
时,新的终端选项卡会在同一目录中打开


你知道我做错了什么吗?

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

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

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

我这样做:

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;

您应该添加一些额外的转义引号,以防
$pwd
中有空格,它会变得有点混乱,但类似于
-e“do script\”cd\\\“$pwd\\”;tail-f mySecond.log\“在前窗口中”
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;