Answers:
这有点棘手,但是您可以在AppleScript中实现。如果您要使用预定数量的选项卡,并希望运行预设的命令,这并不困难。
tell application "Terminal"
-- Activate it.
activate
set targetWindow to 0
-- Get a window that's not busy.
-- If there are no open windows, open one.
if count of windows is greater than 0 then
repeat with currentWindow in windows
if currentWindow is not busy then
set targetWindow to currentWindow
end if
end repeat
else
do script ""
set targetWindow to window 1
end if
-- Do command 1.
set firstCommand to "cd ~/Desktop; clear"
do script firstCommand in targetWindow
-- Open a new tab.
tell application "System Events" to tell process "Terminal" to keystroke "t" using command down
if count of windows is greater than 0 then
repeat with currentWindow in windows
if currentWindow is not busy then
set targetWindow to currentWindow
end if
end repeat
else
do script ""
set targetWindow to window 1
end if
-- Do command 2.
set secondCommand to "cd /Applications; clear"
do script secondCommand in targetWindow
-- And so on...
end tell
当然,用firstCommand
您实际要运行的命令替换,依此类推。无论出于何种原因,Terminal确实没有通过AppleScript创建新选项卡的可访问方法,因此,中间长长的,容易受攻击的外观线只是告诉Terminal键入⌘T以打开该新选项卡,然后在其中执行新命令。
您可以按原样运行此AppleScript,或者在Automator中使用它来创建新服务,然后可以根据需要使用键盘快捷键在任何地方执行该服务。
其他-如果您要在新打开的终端会话中触发一些脚本/命令,可以参考此内容
这是一个可以执行您想要的操作的Shell脚本-对于Apple的Terminal或iTerm(我们都有这两个用户)。
对于打开的选项卡,这将在每个选项卡中执行另一个批处理文件,例如一个用于tomcat的文件,一个用于db的文件等。
#!/bin/bash
function tab () {
local cmd=""
local cdto="$PWD"
local args="$@"
if [ -d "$1" ]; then
cdto=`cd "$1"; pwd`
args="${@:2}"
fi
if [ -n "$args" ]; then
cmd="; $args"
fi
if [ $TERM_PROGRAM = "Apple_Terminal" ]; then
osascript
-e "tell application \"Terminal\"" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $cdto; clear $cmd\" in front window" \
-e "end tell"
> /dev/null
elif [ $TERM_PROGRAM = "iTerm.app" ]; then
osascript
-e "tell application \"iTerm\"" \
-e "tell current terminal" \
-e "launch session \"Default Session\"" \
-e "tell the last session" \
-e "write text \"cd \"$cdto\"$cmd\"" \
-e "end tell" \
-e "end tell" \
-e "end tell" \
> /dev/null
fi
}
tab path_to_script1 sh script1
tab path_to_script2 sh script2
tab path_to_script3 sh script3
由于打开一个新选项卡非常简单,因此我建议您尽可能简单地执行命令,并以老式的方式执行。
您调出了两个特定的动作,因此让我们一起使用它们。请注意,我将根据我对Rails的了解做出许多假设,但不一定特定于您的项目。
简而言之,可以给命令添加别名以执行您想要的操作,或者创建一个简单的Shell脚本来执行您想要的操作。
创建一个名为的shell脚本myapp.start
,其内容如下:
#!/bin/bash
cd Development/rails/myapp
# Do any common environment initializations here, such as RAILS_ENV=development
script/server
您可能还必须在主目录中创建一个名为.bash_profile的文件,或者修改一个已经存在的文件,并添加如下一行:
export PATH="$HOME/bin:${PATH}"
然后,在您的主文件夹中创建一个bin目录,并将myapp.start脚本移入其中。确保它也至少具有所有者执行位(chmod 700 myapp.start
)。
然后,打开Terminal.app,键入myapp.start
,然后运行Rails。或者,键入,mya然后按Tab,让自动完成功能填充其余内容,然后按return。动臂,服务器正在运行。
通过扩展,您可能已经了解如何做日志文件尾部,但是无论如何我都会继续。在〜/ bin中创建另一个文件myapp.taillog,内容如下:
#!/bin/bash
tail -F ~/Development/rails/myapp/logs/development.log
再次将其放置在bin文件夹中chmod 700 ~/bin/myapp.taillog
,然后在启动Rails服务器之后,快速点击⌘t,键入myapp.taillog
,然后您正在打印日志文件。
两个命令,两个附加的按键(打开选项卡),也许就足够了?
这里有两个非常明显的改进。一种是编写一个能够“发现” rails应用程序名称的shell函数,因此您不必为每个脚本编写一个shell脚本,编写一个旨在启动选择的webbrick /您的rails服务器的子命令,然后尾部命令-F'定期添加一些关键日志文件。
第二个改进是您可能编写了一个AppleScript,它可以进行必要的终端交互,并在每个脚本内部执行适当的命令。但坦率地说,我全天都在学习AppleScript,并在bash代码和perl代码中工作,所以我提供与我的技能有关的建议:)。
尽管您可能会根据问题的措辞将您绑定到Apple终端,但是iTerm在编写和管理多个窗口方面优于默认的终端仿真器。
书签的概念允许轻松管理一组窗口。使用AppleScript / Automater编写iTerm脚本更简单,功能更强大,并且在开发人员的网站上记录得更好。(与终端相比)
如果发现普通终端的脚本不能满足需要,请进行检查。我也强烈建议您研究定制unix shell以便为常用命令设置别名。您将在用脚本编写新窗口的初始任务时使用它们,也可以在需要使用Shell且无需切换新窗口的任何时候使用它们。
有一个伟大的答案,以一个非常类似的问题在StackOverflow上,但它可能属于在这里了,所以我就复制/面食它在这里。
这是绝对可能的,但是您将需要做一些工作。您需要做的第一件事是在“设置”中设置所需的每个窗口/选项卡。
我有4个标签,每次打开Terminal时都会自动打开。 DB Shell
,Editor
,Server
,和Shell
。这些都在Sasquatch
(不要问)项目中,因此命名。这些中的每一个都应具有与其相关联的唯一命令。
在这种情况下,我正在执行vim
。如果您碰巧要从某个特定目录开始,则可以使用vim ~/projects/main/
。实际上,无论您要输入什么内容,shell都会在打开时执行该命令。现在,您需要打开所有窗口/选项卡:
Shell
菜单=> New Tab
/ New Window
=>选择您在上面创建的配置文件。Window
菜单=> Save Window As Group...
。Window
菜单=> Open Window Group
=>选择刚刚创建的组。这将在相同位置弹出您刚拥有的所有窗口。您设置的每个命令Settings
都应在各自的选项卡中启动。