Как открыть новую вкладку терминала в текущем рабочем каталоге?

Я хочу создать и запустить функцию bash , которая:

  1. cdв каталог проекта
  2. Откройте новую вкладку в Терминале в том же каталоге
  3. Откройте мои инструменты разработки и запустите службы разработки

Пункт № 2 не работает должным образом, новая вкладка не меняет каталог.

Вот скрипт (обе функции находятся в моем файле .bashrc :

# Open a new tab (needs a path as an argument)
new_terminal_tab(){
    osascript -e "tell application \"Terminal\"" \
                        -e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
                        -e "do script \"cd $1; clear;\" in front window" \
                        -e "end tell"
                        > /dev/null
}

# Set up workspace
affiliatesForm(){
    # cd into the project's directory
    cd /Users/iamuser/Documents/path/to/project\ file
    # Get the working directory
    pwd=`pwd`

    # Open a new tab in Terminal and cd into project's directory
    # The idea is to have a tab with Rails server output, and another tab in the project's directory
    new_terminal_tab $pwd

    # Open the project in Sublime Text 2
    subl $pwd

    # Start the Rails server
    rails server
}

Что я делаю неправильно? Что делает этот код, чего я не знаю?


Обновлять

Путь к каталогу, к которому я пытаюсь получить доступ, содержит пробелы. Но побег из космоса совсем не помогает. Скрипт работает с путями, не содержащими пробелов.

Ответы (5)

При открытии новой вкладки в Терминале по умолчанию должен сохраняться текущий каталог. Если это не так, возможно, вы сломали файл $PROMPT_COMMAND.

Также не забудьте не заменять предыдущее значение, если вы собираетесь добавить пользовательское поведение, добавив ; $PROMPT_COMMANDв конце.

PROMPT_COMMAND="my_custom_function; $PROMPT_COMMAND"

Для справки, вот значение по умолчанию /etc/bashrc(OS X 10.9):

# Tell the terminal about the working directory at each prompt.
if [ "$TERM_PROGRAM" == "Apple_Terminal" ] && [ -z "$INSIDE_EMACS" ]; then
    update_terminal_cwd() {
        # Identify the directory using a "file:" scheme URL,
        # including the host name to disambiguate local vs.
        # remote connections. Percent-escape spaces.
        local SEARCH=' '
        local REPLACE='%20'
        local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
        printf '\e]7;%s\a' "$PWD_URL"
    }
    PROMPT_COMMAND="update_terminal_cwd; $PROMPT_COMMAND"
fi
$PROMPT_COMMAND не сломан. Любые другие предложения?
Это решает мою проблему, хотя было бы полезно объяснить, почему $PROMPT_COMMAND используется для текущего каталога.

Я знаю, что этот вопрос немного устарел, но я только что нашел ответ, который будет полезен для пользователей iTerm2 в Mac OS X.

На вкладке «Профиль» в настройках iTerm2 вы можете точно указать, где iterm открывает новые вкладки под заголовком «Рабочий каталог».

предпочтения iterm

После этого закройте и перезапустите iTerm, и все будет готово!

Это именно то, что я хочу. Танки ;)

Итак, как уже упоминалось, мой скрипт работал с путями, не содержащими пробелов. Оказывается, решения заключаются в заключении переменной (внутри new_terminal_tab()) в одинарные кавычки, например:

-e "do script \"cd '$1'; clear;\" in front window" \

Удивительно, что цитаты могут сделать, не так ли?

Услуга, предоставляемая здесь, работает для меня. Он открывает новую вкладку «Терминал» в папке, из которой я запустил службу.

Я столкнулся с проблемой, что когда у меня уже было открыто окно терминала, оно открывало новое. Я решил это следующим образом:

on run {input, parameters}
    repeat with this_item in input
        set the_path to POSIX path of this_item
        repeat until the_path ends with "/"
            set the_path to text 1 thru -2 of the_path
        end repeat

        set numberOfWindows to "0"

        tell application "Terminal"
            activate
            set numberOfWindows to (numberOfWindows + (count windows))
            if numberOfWindows is 0 then
                do script with command "cd " & quoted form of the_path
                activate
            else
                activate
                delay (0.3)
                tell application "System Events"
                    keystroke "t" using command down
                end tell
                do script with command "cd " & quoted form of the_path in window 0
            end if

        end tell
    end repeat
    return input
end run

Вся заслуга в создании этого кода принадлежит Jeroen Lenarts . Я просто внес небольшие коррективы.

это интересный сценарий. Но моя идея состоит в том, чтобы ввести команду в Терминале и открыть мои приложения, а также две вкладки в Терминале, одну для Rails Server, другую в каталоге, где находится проект.

Я использую приложение под названием go2shell. Это дает вам небольшую кнопку в Finder, которая открывает текущий каталог в терминале.

https://itunes.apple.com/es/app/go2shell/id445770608?mt=12

Вы также можете использовать терминал для перехода в нужную папку и использовать «открыть».