Come aprire una nuova scheda Terminale nella directory di lavoro corrente?

6

Voglio creare ed eseguire una funzione bash che:

  1. cd nella directory di un progetto
  2. Apri una nuova scheda in Terminale nella stessa directory
  3. Apri i miei strumenti dev e avvia i servizi di sviluppo

L'articolo 2 non funziona come previsto, la nuova scheda non cambia directory.

Ecco lo script (entrambe le funzioni si trovano nel mio file .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
}

Che cosa sto sbagliando? Cosa sta facendo questo codice che non conosco?

Aggiornamento

Il percorso per la directory a cui sto tentando di accedere ha spazi in esso. Ma sfuggire allo spazio non aiuta affatto. Lo script funziona con percorsi che non includono spazi.

    
posta sargas 28.04.2014 - 19:02
fonte

5 risposte

1

Così come è stato menzionato, il mio script ha lavorato con percorsi che non includevano spazi. Si scopre che le soluzioni stanno nel racchiudere la variabile (all'interno di new_terminal_tab() ) in virgolette come queste:

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

Incredibile cosa possono fare le citazioni vero?

    
risposta data 29.04.2014 - 19:15
fonte
10

L'apertura di una nuova scheda in Terminal dovrebbe di default mantenere la directory corrente. In caso contrario, potresti aver violato $PROMPT_COMMAND .

Ricorda inoltre di non sostituire il valore precedente se intendi aggiungere un comportamento personalizzato aggiungendo ; $PROMPT_COMMAND alla fine.

PROMPT_COMMAND="my_custom_function; $PROMPT_COMMAND"

Per riferimento, ecco il valore predefinito da /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
    
risposta data 28.04.2014 - 19:09
fonte
5

So che questa domanda è un po 'datata, ma ho appena trovato una risposta che sarebbe utile per gli utenti di iTerm2 su Mac OS X.

Sotto la "scheda profilo" nelle preferenze di iTerm2 puoi impostare esattamente dove iterm apre nuove schede sotto l'intestazione "Directory di lavoro"

Dopo, chiudi e riavvia iTerm e dovresti andare!

    
risposta data 25.08.2016 - 20:50
fonte
0

Il servizio fornito qui funziona per me. Apre una nuova scheda Terminale nella cartella da cui ho eseguito il servizio.

Ho riscontrato il problema che quando avevo già aperto una finestra di Terminale, ne aprivo una nuova. L'ho risolto come segue:

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

Tutti i crediti relativi a questo codice vanno a Jeroen Leenarts . Ho appena apportato alcune piccole regolazioni.

    
risposta data 28.04.2014 - 22:40
fonte
0

Uso un'app chiamata go2shell. Questo ti dà un piccolo bottone sul Finder che apre la directory corrente in un terminale.

link

Puoi anche usare il terminale per effettuare il cd nella cartella che desideri, e usare 'open.'

    
risposta data 28.04.2014 - 21:58
fonte

Leggi altre domande sui tag