Mac OS X / 打开指定窗口的终端

25

是否有可能打开一个带有3个选项卡的终端窗口?每个选项卡应具有不同的路径。

示例:

Tab1: /etc
Tab2: /bin
Tab3: /www/ tail -f file.txt
9个回答

47

这是完全可以做到的,但需要你付出一些努力。首先,你需要在设置中为每个想要的窗口/标签设置:

设置

我有4个选项卡,每次打开终端时都会自动打开这些选项卡:DB ShellEditorServerShell。这些都在Sasquatch项目内,因此命名方式如此。然后,每个选项卡都应该有一个唯一的命令与之关联:

启动命令

在这种情况下,我正在执行vim。如果你有一个特定的目录想要开始,你可以使用像vim ~/projects/main/这样的命令。实际上,当它打开时,任何你想要输入的命令都是shell将执行的。现在你需要打开所有的窗口/标签:

  1. 关闭所有东西。
  2. 为每个配置文件打开一个新的窗口。
    • 转到Shell菜单=> New Tab/New Window => 选择上面创建的配置文件。
    • 对于每个你想要的窗口或选项卡重复此操作。
  3. 当你打开所有窗口和/或选项卡后,将它们保存为一个窗口组。
    • 转到Window菜单=> Save Window As Group...
    • 给你的窗口组命名(这很有帮助)。
    • 如果你希望每次打开终端时都打开这个窗口组,请勾选该屏幕底部的框,然后保存。
  • 关闭所有窗口/标签(测试时间!)
  • 打开你的新窗口组。
    • 进入窗口菜单 => 打开窗口组 => 选择刚才创建的组。
  • 这应该会弹出你刚刚拥有的所有窗口,处于同样的位置。在设置中设置的每个命令都应该在它们各自的标签页中启动。


    太棒了。 我唯一想添加的是窗口组的键盘快捷方式。 http://i.stack.imgur.com/mPVDN.png系统偏好设置 > 键盘 > 快捷键 > 应用程序快捷键。 点击 + 添加快捷方式。只需在“菜单标题”中输入窗口组名称,然后在下一个框中输入快捷方式即可。 - mrgnw
    我使用zsh,并尝试使用这个答案创建一个具有四个选项卡的窗口组,每个选项卡都有不同的pwd。因此,我的启动命令都是cd命令。但是,这些启动命令会覆盖设置为在相同目录中打开新选项卡,并导致Command-T再次运行启动命令以获取新选项卡。 - ma11hew28

    14

    从 Mac OS X Lion 10.7 开始,终端使这个过程更加容易,无需为每个命令创建新配置文件。

    1. 默认情况下,终端将为窗口组中的每个终端记住并恢复当前工作目录。(如果使用转义序列向终端传递了工作目录。默认 shell bash 将在每个命令提示符处执行此操作。对于其他 shell,您需要在 /etc/bashrc 中自己编写代码。)

    2. 如果您使用 Shell > New Command 创建一个终端,当打开窗口组时,终端将自动运行该命令。终端将自动运行一组“安全”的命令†,并在保存窗口组时提供运行所有命令的选项。

    重新启用 Resume 选项后,终端还会自动为所有窗口执行上述操作。因此,根据您的情况,您甚至可能无需创建窗口组。

    对于您的实例:

    1. 使用 Shell > New Command 运行 "tail -f /www/file.txt"。
    2. 创建一个新标签页并运行 "cd /etc"。
    3. 创建一个新标签页并运行 "cd /bin"。
    4. 使用 Window > Save Windows as Group 保存它们。一定要选中“恢复所有命令”复选框。

    每次打开该窗口组时,它都会重新创建这些窗口并运行命令。如果您需要运行一个命令并指定起始目录,在 New Command 对话框中勾选“在 shell 内部运行命令”复选框,并将命令设置为 "cd; "。

    还请注意,您可以告诉终端在启动时使用 Terminal > Preferences > Startup > On startup, open > Window group 打开您的窗口组。甚至在保存新窗口组时还有一个复选框可供设置。

    †“安全”命令包括在/etc/shells中列出的任何内容,以及:screen、tmux、emacs、vi/vim、nano、pico和top。您可以使用“defaults write com.apple.Terminal RestorableCommands”自定义列表。将其设置为包含命令名称或完整路径的字符串数组。某些命令具有参数,在没有用户干预的情况下自动运行是“不安全”的,因此默认情况下,这些命令只有在没有任何参数的情况下才被认为是“安全”的。要使带有参数的命令可以安全运行,请添加一个星号,例如,“top*”是此首选项的默认值。


    我使用zsh。如何让终端记住并恢复窗口组中每个选项卡的当前工作目录? - ma11hew28
    @mattdipasquale:试着在StackOverflow上查找你的问题,如果没有找到与你的问题匹配的问答,那就发一个问题。例如,如果我搜索“Terminal restore working directory zsh”,我会找到https://dev59.com/9m025IYBdhLWcg3w96wW#7544224(我的回答),其中我链接到另一个问答,在那里我提供了zsh的代码http://superuser.com/a/328148/81175,它还提到这段代码现在已经成为Oh My Zsh包的一部分。所以如果你正在使用OMZ,你将自动获得这个功能。 - Chris Page
    嗨,在我点击“窗口>保存窗口组”时,文件保存在哪里?我想保留这个文件的副本,以便如果我移动到另一台机器或其他地方,我有这些文件的物理备份。 - firstpostcommenter
    @firstpostcommenter 如果您想提问,请创建一个问答。 - Chris Page
    嗨,谢谢更新。我意识到我的评论是一个重复的问题 https://dev59.com/S3TYa4cB1Zd3GeqPwpp_ - firstpostcommenter

    7
    您可以在终端内执行所需操作。
    如果在终端首选项(设置选项卡)中创建新配置文件(或复制一个具有重复设置的配置文件),则可以在每个配置文件中设置在启动时运行命令(配置文件中的“Shell”子组)。
    然后使用Shell>新建选项卡菜单通过使用您为三个不同可执行文件创建的特定配置文件创建新选项卡来设置选项卡。
    然后进行“保存窗口组”以保存选项卡组(它还将保存它们的配置文件)。

    5

    我建议使用iTerm而不是Terminal。因为它更加可配置。你可以编写脚本,但对你更重要的是,你可以创建一个书签文件夹(每个标签页一个),然后“在标签页中打开”,这将给你想要的行为。


    2
    +1. 看起来这已经被一个独立的项目 iTerm2 取代了。我会试一试! - halfer

    1

    我猜你也可以控制要执行的命令。我使用的其中一个程序创建了一个单标签终端窗口,并安排在继续到命令提示符之前执行配置文件设置脚本 - 对于多标签终端来说应该也是可行的。该文件是MacOS X属性XML文件。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>CommandString</key>
        <string>. /Applications/IBM/informix/demo/server/profile_settings</string>
        <key>FontAntialias</key>
        <false/>
        <key>RunCommandAsShell</key>
        <false/>
        <key>ShowShellCommandInTitle</key>
        <true/>
        <key>TerminalType</key>
        <string>xterm</string>
        <key>WindowTitle</key>
        <string>IDS Command Window</string>
        <key>name</key>
        <string>IDS Command Window</string>
        <key>type</key>
        <string>Window Settings</string>
    </dict>
    </plist>
    

    您可以单击它,启动终端窗口,设置配置文件,然后就可以在命令提示符处输入命令。假设将“点”命令更改为问题中的“tail”命令将起作用;也许将“RunCommandAsShell”键设置为“<true\>”将替换正常的 shell 命令 - 这可能更适合该问题。


    1

    0

    如何创建自定义iTerm2窗口布局

    创建一个自定义的键盘快捷方式,以自动产生一组运行进程的窗口和分割。

    使用快捷键cmd+shift+w将您的窗口布局转换为3个面板。

    https://www.youtube.com/watch?v=Rg8AT-nds1Q


    0

    打开你想要的选项卡,并按照你的意愿设置每个选项卡,例如在选项卡1中输入cd /etc,在选项卡2中输入cd /bin等等。现在转到“窗口”>“保存窗口组”。勾选“终端启动时使用窗口组”复选框,完成!


    虽然我不认为您可以设置选项卡来实际执行特定命令(例如示例中的tail)。这是可能的吗? - rledley
    我认为这只是在10.7上的情况 - 在10.6上,CWDs不会被记住。 - halfer

    0

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接