Wie öffne ich eine neue Terminal-Registerkarte im aktuellen Arbeitsverzeichnis?

Ich möchte eine Bash- Funktion erstellen und ausführen, die:

  1. cdin ein Projektverzeichnis
  2. Öffnen Sie einen neuen Tab im Terminal im selben Verzeichnis
  3. Öffnen Sie meine Entwicklungstools und starten Sie die Entwicklungsdienste

Punkt 2 funktioniert nicht wie erwartet, die neue Registerkarte ändert das Verzeichnis nicht.

Hier ist das Skript (beide Funktionen befinden sich in meiner .bashrc -Datei:

# 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
}

Was mache ich falsch? Was macht dieser Code, den ich nicht weiß?


Aktualisieren

Der Pfad für das Verzeichnis, auf das ich zugreifen möchte, enthält Leerzeichen. Aber dem Raum zu entkommen, hilft überhaupt nicht. Das Skript arbeitet mit Pfaden, die keine Leerzeichen enthalten.

Antworten (5)

Beim Öffnen eines neuen Tabs im Terminal sollte standardmäßig das aktuelle Verzeichnis beibehalten werden. Wenn dies nicht der Fall ist, haben Sie möglicherweise die $PROMPT_COMMAND.

; $PROMPT_COMMANDDenken Sie auch daran, den vorherigen Wert nicht zu ersetzen, wenn Sie beabsichtigen, benutzerdefiniertes Verhalten durch Hinzufügen am Ende hinzuzufügen .

PROMPT_COMMAND="my_custom_function; $PROMPT_COMMAND"

Als Referenz ist hier die Standardeinstellung von /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 ist nicht defekt. Irgendwelche anderen Vorschläge?
Dies behebt mein Problem, obwohl es nützlich wäre zu erklären, warum $ PROMPT_COMMAND für das aktuelle Verzeichnis verwendet wird.

Ich weiß, dass diese Frage etwas veraltet ist, aber ich habe gerade eine Antwort gefunden, die für iTerm2-Benutzer unter Mac OS X nützlich wäre.

Unter der Registerkarte „Profil“ in den iTerm2-Einstellungen können Sie genau festlegen, wo iterm neue Registerkarten unter der Überschrift „Arbeitsverzeichnis“ öffnet

Artikeleinstellungen

Schließen Sie danach iTerm und starten Sie es neu, und Sie sollten bereit sein!

Das ist genau das, was ich will. Panzer ;)

Wie bereits erwähnt, funktionierte mein Skript mit Pfaden, die keine Leerzeichen enthielten. Es stellt sich heraus, dass die Lösung darin besteht, die Variable (innerhalb new_terminal_tab()von ) wie folgt in einfache Anführungszeichen zu setzen:

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

Erstaunlich, was Anführungszeichen bewirken können, nicht wahr?

Der hier angebotene Service funktioniert für mich. Es öffnet eine neue Terminal-Registerkarte in dem Ordner, in dem ich den Dienst ausgeführt habe.

Ich bin auf das Problem gestoßen, dass, wenn ich bereits ein Terminalfenster geöffnet hatte, ein neues geöffnet wurde. Ich habe es wie folgt gelöst:

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

Alle Anerkennung für diesen Code geht an Jeroen Leenarts . Ich habe nur ein paar kleine Anpassungen vorgenommen.

das ist ein interessantes Skript. Aber meine Idee ist, einen Befehl in Terminal einzugeben und meine Anwendungen sowie die beiden Registerkarten in Terminal zu öffnen, eine für Rails Server, eine andere in dem Verzeichnis, in dem sich das Projekt befindet.

Ich verwende eine App namens go2shell. Dadurch erhalten Sie eine kleine Schaltfläche im Finder, die das aktuelle Verzeichnis in einem Terminal öffnet.

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

Sie können auch das Terminal verwenden, um in den gewünschten Ordner zu wechseln und „Öffnen“ zu verwenden.