Я хочу создать и запустить функцию bash , которая:
cd
в каталог проектаПункт № 2 не работает должным образом, новая вкладка не меняет каталог.
Вот скрипт (обе функции находятся в моем файле .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
}
Что я делаю неправильно? Что делает этот код, чего я не знаю?
Путь к каталогу, к которому я пытаюсь получить доступ, содержит пробелы. Но побег из космоса совсем не помогает. Скрипт работает с путями, не содержащими пробелов.
При открытии новой вкладки в Терминале по умолчанию должен сохраняться текущий каталог. Если это не так, возможно, вы сломали файл $PROMPT_COMMAND
.
Также не забудьте не заменять предыдущее значение, если вы собираетесь добавить пользовательское поведение, добавив ; $PROMPT_COMMAND
в конце.
PROMPT_COMMAND="my_custom_function; $PROMPT_COMMAND"
Для справки, вот значение по умолчанию /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
Я знаю, что этот вопрос немного устарел, но я только что нашел ответ, который будет полезен для пользователей iTerm2 в Mac OS X.
На вкладке «Профиль» в настройках iTerm2 вы можете точно указать, где iterm открывает новые вкладки под заголовком «Рабочий каталог».
После этого закройте и перезапустите iTerm, и все будет готово!
Итак, как уже упоминалось, мой скрипт работал с путями, не содержащими пробелов. Оказывается, решения заключаются в заключении переменной (внутри new_terminal_tab()
) в одинарные кавычки, например:
-e "do script \"cd '$1'; clear;\" in front window" \
Удивительно, что цитаты могут сделать, не так ли?
Услуга, предоставляемая здесь, работает для меня. Он открывает новую вкладку «Терминал» в папке, из которой я запустил службу.
Я столкнулся с проблемой, что когда у меня уже было открыто окно терминала, оно открывало новое. Я решил это следующим образом:
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
Вся заслуга в создании этого кода принадлежит Jeroen Lenarts . Я просто внес небольшие коррективы.
Я использую приложение под названием go2shell. Это дает вам небольшую кнопку в Finder, которая открывает текущий каталог в терминале.
https://itunes.apple.com/es/app/go2shell/id445770608?mt=12
Вы также можете использовать терминал для перехода в нужную папку и использовать «открыть».
саргас
Исевчик