¿Cómo abrir una nueva pestaña de Terminal en el directorio de trabajo actual?

6

Quiero crear y ejecutar una función bash que:

  1. cd en el directorio de un proyecto
  2. Abre una nueva pestaña en la Terminal en el mismo directorio
  3. Abre mis herramientas de desarrollo e inicia los servicios de desarrollo

El elemento # 2 no funciona como se esperaba, la nueva pestaña no cambia el directorio.

Aquí está el script (ambas funciones residen en mi archivo .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
}

¿Qué estoy haciendo mal? ¿Qué está haciendo este código que no sé?

Actualizar

La ruta del directorio al que estoy tratando de acceder tiene espacios en él. Pero escapar del espacio no ayuda en absoluto. El script funciona con rutas que no incluyen espacios.

    
pregunta sargas 28.04.2014 - 19:02

5 respuestas

1

Así como se mencionó, mi script trabajó con rutas que no incluían espacios. Resulta que las soluciones se encuentran en envolver la variable (dentro de new_terminal_tab() ) en comillas simples como esta:

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

Es increíble lo que pueden hacer las citas, ¿no?

    
respondido por el sargas 29.04.2014 - 19:15
10

La apertura de una nueva pestaña en la Terminal debería conservar por defecto el directorio actual. Si no lo hace, es posible que haya roto el $PROMPT_COMMAND .

También recuerda no reemplazar el valor anterior si pretendes agregar un comportamiento personalizado agregando ; $PROMPT_COMMAND al final.

PROMPT_COMMAND="my_custom_function; $PROMPT_COMMAND"

Para referencia, aquí está el valor predeterminado de /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
    
respondido por el grg 28.04.2014 - 19:09
5

Sé que esta pregunta está un poco pasada de moda, pero acabo de encontrar una respuesta que sería útil para los usuarios de iTerm2 en Mac OS X.

Bajo la "pestaña de perfil" en las preferencias de iTerm2 puede establecer exactamente dónde abre nuevas pestañas bajo el encabezado "Directorio de trabajo"

Después de eso, cierra y reinicia iTerm, ¡y deberías estar listo!

    
respondido por el rossarian 25.08.2016 - 20:50
0

El servicio proporcionado aquí funciona para mí. Abre una nueva pestaña de Terminal en la carpeta desde la que ejecuté el servicio.

Me encontré con el problema de que cuando ya tenía una ventana de Terminal abierta, se abría una nueva. Lo resolví de la siguiente manera:

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

Todo el crédito por este código va a Jeroen Leenarts . Acabo de hacer algunos pequeños ajustes.

    
respondido por el Saaru Lindestøkke 28.04.2014 - 22:40
0

Uso una aplicación llamada go2shell. Esto le da un pequeño botón en el Finder que abre el directorio actual en una terminal.

enlace

También puede usar el terminal para ir a la carpeta que desea y usar 'abrir'.

    
respondido por el Jose Llausas 28.04.2014 - 21:58

Lea otras preguntas en las etiquetas