Это возможно в zsh, и на самом деле это легко благодаря прямому доступу к параметрам задания, обеспеченным zsh/parameter модулем. Можно использовать число задания или любую спецификацию задания (%+
, %-
, %foo
, и т.д.) как нижний индекс в массиве.
zmodload zsh/parameter
fgcd () {
local dir=$jobdirs[${1:-%+}]
# If the jobspec matched, then call cd. Otherwise it's probably a bad
# job spec, but call fg anyway to get the usual error message.
if [[ -n $dir ]]; then cd $dir; fi
fg $1
}
Bash также отслеживает информацию, но я не думаю, что это выставляется. В некоторых системах можно получить текущий рабочий каталог процесса задания и переключиться на него. Например, на Linux, /proc/$pid/cwd
символьная ссылка на рабочий каталог того процесса.
fgcd () { # Linux only
local pid=$(jobs -p $1)
if [[ -n $pid ]]; then cd /proc/$pid/cwd; fi
fg $1
}
Так как это может также быть полезно, вот zsh версия. В отличие от функции выше, который переключается на исходный каталог задания, эти переключатели к текущему рабочему каталогу лидера процесса задания.
fgcd () { # Linux only
local pid=${${${jobstates[${1:-%+}]}#*:*:}%\=*}
if [[ -n $pid ]]; then cd /proc/$pid/cwd; fi
fg $1
}
Системы Unix имеют тенденцию быть организованными с различными типами файлов, распространенных по различным каталогам. Например, исполняемые файлы обычно находятся в названных каталогах bin
(/bin
, /usr/bin
, /usr/local/bin
, …); исторически, bin
обозначавший за двоичный файл, потому что исполняемые файлы являются двоичными файлами (машинный код), но также могут быть сценарии. С тех пор существует несколько каталогов, которые содержат исполняемые файлы, и полезно добавить и удалить каталоги на лету (например, протестировать мультиисполняемое приложение, Вы временно добавляете его к пути поиска для исполняемых файлов), существует переменная среды для этого: PATH
. Когда Вы выполняете программу путем давания ее имени, оболочка ищет ее в каталогах, упомянутых в PATH
переменная (это - разделенный от двоеточия список каталогов).
Тот же механизм существует для других типов файлов, которые некоторая программа собирается искать по имени. Вот некоторые типичные PATH
- как переменные (отмечают, что пути в качестве примера, которые я даю, не точно, чему Вы найдете в своей системе, там' просто там давать общее представление).
PATH
: исполняемые файлы (например. /home/username/bin:/usr/local/bin:/usr/bin:/bin
).MANPATH
: страницы руководства (например. /usr/local/man:/usr/man
).LD_LIBRARY_PATH
: библиотеки собственного кода (на Linux, в дополнение к значению этой переменной, путь поиска обычно содержит /usr/local/lib
, /usr/lib
, /lib
и немногие другие). Имя LD
прибывает из динамического загрузчика, компонент системы, который загружает библиотеки в динамично связанные исполняемые файлы.PERL5LIB
: Библиотеки Perl (например. /usr/local/lib/site-perl:/usr/lib/site-perl:/usr/lib/perl:/usr/share/perl
).PYTHONPATH
: Библиотеки Python (например. /usr/local/lib/python:/usr/lib/python:/usr/lib/python2.6
).TCLLIBPATH
: Библиотеки TCL (например. /usr/local/lib/tcltk:/usr/lib/tcltk
).Таким образом, если Ваш pkg.tcl
автономный исполняемый файл, дайте ему полномочия выполнения и отбросьте его где-нибудь в $PATH
. Если это - библиотека TCL, загруженная программой TCL, отбросьте его где-нибудь в $TCLLIBPATH
.
PATH
для определения каталогов исполняемых программ. LD_LIBRARY_PATH
используется для определения каталогов библиотек.
PATH
используется, прежде всего, оболочкой, в то время как LD_LIBRARY_PATH
используется динамическим загрузчиком (обычно ld-linux.so
).
– manatwork
08.08.2012, 10:54