Як відкрити нову вкладку Термінал у поточному робочому каталозі?

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

  1. cd into a project's directory
  2. Open a new tab in Terminal in the same directory
  3. Open my dev tools and start dev services

Елемент №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
}

Що я роблю неправильно? Що робить цей код, який я не знаю?


Оновлення

Шлях до каталогу, до якого я намагаюся отримати доступ, має пробіли. Але уникнути простору не допомагає взагалі. Скрипт працює з шляхами, які не містять пробілів.

6

5 Відповіді

Opening a new tab in Terminal should by default retain the current directory. If it doesn't, you may've broken the $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
10
додано
$ PROMPT_COMMAND не порушено. Інші пропозиції?
додано Автор Solanacea, джерело

Я знаю, що це питання трохи датоване, але я тільки що знайшов відповідь, яка буде корисною для користувачів iTerm2 на Mac OS X.

На вкладці "Профіль" у налаштуваннях iTerm2 можна встановити, де саме iterm відкриває нові вкладки під заголовком "Робочий каталог"

iterm preferences

Після цього закрийте i перезапустіть iTerm, і ви повинні добре йти!

5
додано
Це саме те, що я хочу. Танки;)
додано Автор Set Theory, джерело

Як було згадано, мій сценарій працював з шляхами, які не включали пробілів. Виявляється, що рішення полягають у упаковці змінної (всередині new_terminal_tab() ) в одинарні лапки так:

-e "зробити скрипт" cd '$ 1'; "у передньому вікні".

Дивно, що можна зробити, не так?

1
додано

Я використовую програму під назвою go2shell. Це дає вам невелику кнопку на Finder, що відкриває поточний каталог в терміналі.

? mt = 12

Ви також можете скористатися терміналом для переходу до потрібної папки і використовувати "відкрити".

0
додано

Надана служба тут працює для мене. Він відкриває нову вкладку Термінал у папці, з якої я запускав службу.

Я зіткнувся з проблемою, що коли я вже мав відкрите вікно Терміналу, він відкриє новий. Я вирішив це так:

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 Leenarts . Я тільки що зробив невеликі зміни.

0
додано
це цікавий сценарій. Але моя ідея полягає в тому, щоб набрати команду в Terminal і відкрити мої програми, а також дві вкладки в Terminal, одна для Rails Server, інша в каталозі, де знаходиться проект.
додано Автор Solanacea, джерело