8 votos

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

Quiero crear y ejecutar un bash función que:

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

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

Aquí está el script (ambas funciones residen en mi .bashrc archivo:

# 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é hace este código que yo no sé?


Actualización

La ruta del directorio al que intento acceder tiene espacios. Pero escapar el espacio no ayuda en absoluto. El script funciona con rutas que no incluyen espacios.

15voto

siva Puntos 23

La apertura de una nueva pestaña en el Terminal debería conservar por defecto el directorio actual. Si no lo hace, asegúrese de que no ha roto el $PROMPT_COMMAND . Aquí está el valor por defecto de /etc/bashrc :

# 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

0 votos

$PROMPT_COMMAND no está roto. ¿Alguna otra sugerencia?

0 votos

Esto soluciona mi problema, aunque sería útil explicar por qué se utiliza $PROMPT_COMMAND para el directorio actual.

7voto

rossarian Puntos 61

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

En la "pestaña de perfil" de las preferencias de iTerm2 se puede establecer exactamente dónde abre iterm las nuevas pestañas bajo el epígrafe "Directorio de trabajo"

iterm preferences

Después de eso, cierre y reinicie iTerm y debería estar listo.

0 votos

Esto es exactamente lo que quiero. Gracias ;)

1voto

Rob Y Puntos 231

Entonces, como se mencionó, mi script funcionaba con rutas que no incluían espacios. Resulta que la solución está en envolver la variable (dentro de new_terminal_tab() ) entre comillas simples, así:

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

Es increíble lo que pueden hacer las comillas, ¿verdad?

0voto

Chepe77 Puntos 108

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

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

También puedes usar el terminal para ir a la carpeta que quieras, y usar 'open .'

0voto

Deecee Puntos 39

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

Sí me encontré con el problema de que cuando ya tenía una ventana de Terminal abierta se abría una nueva. Lo solucioné 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 mérito de este código es de Jeroen Leenarts . Sólo hice algunos pequeños ajustes.

0 votos

Es un interesante script. Pero mi idea es escribir un comando en Terminal y tener mis aplicaciones abiertas así como las dos pestañas en Terminal, una para Rails Server, otra en el directorio donde reside el proyecto.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X