我正在尝试编写一个脚本,该脚本将在终端上显示两个选项卡。我希望每个选项卡都有一个不同的日志文件。该脚本位于/ 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
时,新的终端选项卡将在同一目录中打开。
关于我做错的任何想法?
答案 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;