`объявить -F `не работает в zsh

Динамический компоновщик ищет библиотеки в разных местах, но по умолчанию они не включают текущий каталог. В Linux список

  • пути, определенные в rpath бинарника, если таковые имеются;
  • пути, перечисленные в LD_LIBRARY_PATH, если таковые имеются;
  • пути, определенные в пути выполнения бинарного файла, если таковые имеются;
  • библиотеки, известные в /etc/ld.so.cache;
  • пути системных библиотек(/usr/libи т. д. ).

Ссылка выше содержит более подробную информацию.

Вы можете повлиять на способ разрешения зависимостей путем экспорта LD_LIBRARY_PATH; конкретно в вашем случае:

export LD_LIBRARY_PATH=.

(Не оставляйте это значение.)

-1
18.06.2020, 16:38
2 ответа

В Zshdeclare -Fобъявляется переменная с плавающей запятой двойной -точности:

$ declare -F myvar
$ echo $myvar
0.0000000000

Чтобы перечислить все имена функций в Zsh, используйте typeset -f +.

В zshспециальный ассоциативный массив $functionsсопоставляет имена функций с их определением, поэтому ${(k)functions}, который расширяется до клавиш этого ассоциативного массива, также расширяется до списка имен функций.

Bash и Zsh — разные оболочки, нельзя ожидать, что они будут вести себя точно так же.

3
18.03.2021, 23:26

declareне является стандартным расширением оболочки -.

Вы не можете ожидать, что это будет работать одинаково в bashи zsh.

В общем, если вы хотите использовать нестандартные -расширения в сценарии оболочки, обязательно используйте оболочку, для которой они были разработаны, с ожидаемым поведением. Другими словами, :Если вы хотите получить поведение bash, используйте bashв своем скрипте.

BTW :Функция, которую вы хотите использовать, отсутствует вPOSIX

2
18.03.2021, 23:26

Теги

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