Открытие новой вкладки терминала в OSX (Snow Leopard) с открытием каталога каталога окон терминала
Я давно искал Google, ища простой способ сделать это, и я не могу найти его.
У меня есть настраиваемая настраиваемая среда терминала (zsh) с различными псевдонимами и функциями, чтобы упростить задачу. Одна вещь, которую я продолжаю работать, это то, что я быстро APPLE-t создаю новую вкладку, а затем наберу команду относительно пути к окну терминала, в котором я был только что. Это неизменно терпит неудачу, потому что путь к новой вкладке равен ~/вместо того, что я просто использовал!
Любые идеи для script установить путь к каталогам новых вкладок терминала в путь каталога на вкладке открытия?
Любая помощь в наибольшей степени оценена.
Ян
Ответы
Ответ 1
ОК, так как это мой путь, я снова отвечаю на свой вопрос (ну, по крайней мере, как можно ближе ответить на него)
Я нашел менее подробный script тот, что был выше (любезно предоставлен Dan Benjamin), который, кажется, делает трюк, хотя оба сценария выдают аналогичную ошибку перед успешным завершением. Я рассмотрел это, добавив clear в конец script, чтобы не было большой проблемы.
Я говорю, что я почти решил свою проблему, потому что моя цель состояла в том, чтобы найти способ выполнить это с помощью ключевой команды Apple-t, которая была сожжена в моей мышечной памяти, как ярлык для новой вкладки во всем, спасибо до бесчисленных часов в различных веб-браузерах. Лучшее, что я могу сделать с помощью script, например, Dan, - это t-возврат, который не является большой разницей, но достаточно большой, что я буду слегка раздражать каждый раз, когда выдаю указанную команду. Я знаю, я должен отпустить это... Но я не могу, возможно, так, как я попал в этот беспорядок, в первую очередь, бесконечно возился с компьютерами. Я отвлекся, вот script Я использую:
#!/bin/sh
# Make a new OS X Terminal tab with the current working directory.
if [ $# -ne 1 ]; then
PATHDIR=`pwd`
else
PATHDIR=$1
fi
/usr/bin/osascript <<EOF
activate application "Terminal"
tell application "System Events"
keystroke "t" using {command down}
end tell
tell application "Terminal"
repeat with win in windows
try
if get frontmost of win is true then
do script "cd $PATHDIR; clear" in (selected tab of win)
end if
end try
end repeat
end tell
EOF
clear
Для полноты здесь приведена ошибка, которая выплевывается в окне запроса, если опускание прокрутки отсутствует:
2009-10-20 01:30:38.714 osascript[20862:903] Error loading /Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: dlopen(/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types, 262): no suitable image found. Did find:
/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: no matching architecture in universal wrapper
osascript: OpenScripting.framework - scripting addition "/Library/ScriptingAdditions/Adobe Unit Types.osax" declares no loadable handlers.
tab 2 of window id 13942
Ответ 2
У меня есть несколько сценариев, которые я использую:
dup (новое окно с рабочим каталогом):
#!/bin/sh
pwd=`pwd`
osascript -e "tell application \"Terminal\" to do script \"cd $pwd; clear\"" > /dev/null
и tup (новая вкладка с одним и тем же рабочим каталогом):
#!/bin/sh
pwd=`pwd`
osascript -e "tell application \"Terminal\"" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $pwd; clear\" in front window" \
-e "end tell"
> /dev/null
Ответ 3
Другим решением без скриптов является iTerm2, в котором встроена эта функция. У него есть еще больше возможностей, которые позволяют проверить тоже.
Ответ 4
Вы можете получить то, что хотите, изменив BASH script на http://www.entropy.ch/blog/Mac+ OS + X/2008/06/27/Терминал-Tricks- "термин" -revisited-с-вкладок. Вот script, взятый с сайта Marc Linyage www.entropy.ch/blog.
#!/bin/sh
#
# Open a new Mac OS X terminal window or tab in the current or another
# directory and optionally run a command in the new window or tab.
#
# - Without any arguments, the new terminal window opens in
# the current directory, i.e. the executed command is "cd $PWD".
# - If the first argument is a directory, the new terminal will "cd" into
# that directory before executing the remaining arguments as command.
# - The optional "-t" flag executes the command in a new tab
# instead of a new window.
# - The optional "-x" flag closes the new window or tab
# after the executed command finishes.
# - The optional "-p" flag takes an argument of the form x,y (e.g. 40,50) and
# positions the terminal window to the indicated location on the screen
# - The optional "-s" flag takes an argument of the form w,h (e.g. 800,400) and
# resizes the terminal window to the indicated width and height in pixels.
#
# Written by Marc Liyanage <http://www.entropy.ch>
#
# Version 2.1
#
set -e
while getopts xtp:s: OPTION; do
[ $OPTION = "x" ] && { EXIT='; exit'; }
[ $OPTION = "t" ] && { TAB=1; }
[ $OPTION = "p" ] && { POSITION="set position of window 1 to {$OPTARG}"; }
[ $OPTION = "s" ] && { SIZE="set size of window 1 to {$OPTARG}"; }
done
for (( $OPTIND; $OPTIND-1; OPTIND=$OPTIND-1 )); do shift; done
if [[ -d "$1" ]]; then WD=$(cd "$1"; pwd); shift; else WD=$PWD; fi
COMMAND="cd '$WD' && echo -n \$'\\\\ec';"
for i in "[email protected]"; do
COMMAND="$COMMAND '$i'"
done
if [ $TAB ]; then
osascript 2>/dev/null <<EOF
tell application "System Events"
tell process "Terminal" to keystroke "t" using command down
end
tell application "Terminal"
activate
do script with command "$COMMAND $EXIT" in window 1
$POSITION
$SIZE
end tell
EOF
else
osascript <<EOF
tell application "Terminal"
activate
do script with command "$COMMAND $EXIT"
$POSITION
$SIZE
end tell
EOF
fi
Ответ 5
В моем ответе здесь я предоставил функцию и псевдоним:
function cd () { command cd "[email protected]"; echo "$PWD" > /tmp/CWD; }
export cd
alias cdp='cd $(cat /tmp/CWD)'
Вы должны иметь возможность поставить (возможно условный) оператор в конце вашего ~/.bashrc
или ~/.zshrc
для выполнения этого псевдонима.