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

Quiero crear y ejecutar una function bash que:

  1. cd en el directory de un proyecto
  2. Abrir una nueva pestaña en Terminal en el mismo directory
  3. Abrir mis herramientas de dev y empezar los services de dev

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

  • ¿Ejecutar un script basado en la puesta de sol y la información del amanecer?
  • ¿Cómo get una list de windows de la aplicación sólo desde el escritorio actual con applescript?
  • Cambiar el correo electrónico de Apple "Classic Layout" con acceso directo?
  • Cualquier manera de establecer / añadir tags en un file con Applescript bajo Mavericks?
  • Monta unidades compartidas con diferentes usuarios
  • habilitar / deshabilitar el uso compartido de Internet con el terminal en mac osx 10.9.2
  • Aquí está el script (ambas funciones que residen en mi 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 } 

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


    Actualizar

    La ruta del directory al que bash acceder tiene espacios en él. Pero escaping del espacio no ayuda en absoluto. El script funciona con routes que no incluyen espacios.

  • Cambio de color del terminal
  • ¿Cuáles son las diferencias entre los guiones de aprendizaje guardados como * .scpt y * .applescript?
  • Automator o AppleScript para quitar varias cadenas de nombres de file?
  • ¿Cómo puedo escribir un script para abrir múltiples fichas de terminal y ejecutar código en ellas?
  • Haga clic con el button derecho del ratón en Crear un nuevo documento - ¿Cómo?
  • AppleScript: ¿Cómo abrir el file de text y mover el cursor a la location específica (señalado por el carácter específico)?
  • 5 Solutions collect form web for “¿Cómo abrir una nueva pestaña Terminal en el directory de trabajo actual?”

    Abrir una nueva pestaña en Terminal debería conservar por defecto el directory actual. Si no lo hace, puede haber roto la $PROMPT_COMMAND .

    También recuerde no replace el valor anterior si tiene la intención de agregar un comportamiento personalizado añadiendo ; $PROMPT_COMMAND ; $PROMPT_COMMAND al final.

     PROMPT_COMMAND="my_custom_function; $PROMPT_COMMAND" 

    Para reference, este es el valor pnetworkingeterminado 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 si ["$ TERM_PROGRAM" == "Apple_Terminal"] && [-z "$ INSIDE_EMACS"]; # 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 update_terminal_cwd () { # 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 # Identifique el directory usando una URL de esquema "file:", # 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 # incluyendo el nombre de host para desambiguar local vs. # 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 # conexiones remotas. # 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 Porcentaje de espacios de escape. # 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 local SEARCH = '' # 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 local REPLACE = '% 20' # 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 local PWD_URL = "file: // $ HOSTNAME $ {PWD // $ SEARCH / $ REPLACE}" # 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 printf '\ e] 7;% s \ a' "$ PWD_URL" # 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 = "update_terminal_cwd; $ PROMPT_COMMAND" # 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 

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

    En la pestaña "perfil" de las preferences de iTerm2 puede definir exactamente donde iterm abre nuevas tabs en el encabezado "Directorio de trabajo"

    iterm preferencias

    Después de eso, cierre y reinicie iTerm y usted debe ser bueno para ir!

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

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

    Increíble lo que las cotizaciones pueden hacer ¿no?

    El service prestado aquí funciona para mí. Se abre una nueva ficha Terminal en la carpeta de la que ejecuté el service.

    Encontré el problema de que cuando ya tenía una window de Terminal abierta abrirí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 decir 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 decir 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 devolver input 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 para este código va a Jeroen Leenarts . Acabo de hacer algunos pequeños ajustes.

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

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

    También puede utilizar el terminal para copyr a la carpeta que desee y utilice 'abrir'.

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).