Я получаю это, когда я открываю терминальную сессию:
sh: ошибка импорта определения функции для `read.json '
sh: ошибка импорта определения функции для `ts-project '
sh не любит эти функции, потому что они выглядят так:
read.json(){
::
}
и
ts-project(){
::
}
реальный вопрос - зачем sh
трогать / интерпретировать эти файлы? Я на MacOS и видел это раньше, это такая загадка. Я думаю, что только bash будет загружать эти файлы.
Обновление : Bash и Sh ничего необычного. когда я набираю bash в терминал, я получаю это:
alex$ bash
beginning to load .bashrc
finished loading .bashrc
bash-3.2$
когда я печатаю sh
в терминале, я получаю это:
alex$ sh
sh: error importing function definition for `read.json'
sh: error importing function definition for `ts-project'
sh-3.2$
bash
shell
bash-functions
Александр Миллс
источник
источник
sh
, из какого источника получен файл .profile?bash
источника, один сSTRICT_POSIX
другим, без него.Ответы:
Эта ошибка возникает, когда
bash
маскарад под POSIX-оболочку пытается импортировать эти функции из среды, а не при загрузке их путем интерпретации файла~/.bashrc
или чего-то подобного. Упрощенный пример:Я ожидал
bash
не загружать функции из окружения в режиме posix, но это происходит , и он жалуется только тогда, когда их имена содержат забавные символы.Обратите внимание , что
bash
также будет работать в режиме Posix , когдаPOSIXLY_CORRECT
илиPOSIX_PEDANTIC
переменная среды, или когда он был скомпилирован с--enable-strict-posix-default
/STRICT_POSIX
.Последнее , как представляется, в случае
/bin/sh
на MacOS (см здесь дляPRODUCT_NAME = sh
), где я ожидаю эту ошибку также триггер при использовании библиотечных функций , таких какpopen(3)
илиsystem(3)
.источник
sh
это то , что сделало SHELLSHOCK / bashdoor уязвимость намного хуже.SHELLOPTS=posix
и-o posix
другие способы включения режима posix.set -a
/set -o allexport
также заставляет bash экспортировать все функции (и, если вызывается какsh
, вызываетPOSIXLY_CORRECT
установку и экспорт!)sh -a
ПричиныPOSIXLY_CORRECT
должны быть установлены и на экспорт,set -a
после того, какsh
не-a
был запущен не экспортирует ,POSIXLY_CORRECT
потому что он был установлен , прежде чем-a
был в действительности).Чтобы ответить на часть о том, почему
read.json
иts-project
не являются переносимыми именами функций:Согласно стандарту POSIX, определение функции должны быть названы по
Также известный как идентификатор , в C lingo. Или в регулярном выражении:
[_a-zA-Z][0-9_a-zA-Z]*
источник
zsh
/rc
/fish
...)bash
, или он не будет импортировать функции из среды в режиме POSIX, что не требуется спецификацией POSIX ;-)Так что это вызвало то, что я использую некоторые сценарии bash в моем файле ~ / .bashrc, например так:
поэтому я просто изменил его на:
так что в теории, если он вызывается к тому
sh
времени, он не будет пытаться получить эти файлы, но не уверен, будет ли это работать 100% времени.источник