Каково различие между ПУТЕМ и LD_LIBRARY_PATH?

Это возможно в 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
}

27
08.08.2012, 06:29
2 ответа

Системы 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.

30
27.01.2020, 19:39

PATH для определения каталогов исполняемых программ. LD_LIBRARY_PATH используется для определения каталогов библиотек.

23
27.01.2020, 19:39
  • 1
    С другой точки зрения, PATH используется, прежде всего, оболочкой, в то время как LD_LIBRARY_PATH используется динамическим загрузчиком (обычно ld-linux.so). –  manatwork 08.08.2012, 10:54

Теги

Похожие вопросы