0

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

关于我做错了什么的任何想法?

4

2 回答 2

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它将始终向您显示正确的文件。

于 2013-10-14T17:43:12.227 回答
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;
于 2013-10-14T17:57:43.383 回答