Recibo este cuando abro una sesión de terminal:
sh: error al importar la definición de función para `read.json '
sh: error al importar la definición de la función para 'ts-project'
A sh no le gustan estas funciones porque se ven así:
read.json(){
::
}
y
ts-project(){
::
}
La verdadera pregunta es: ¿por qué shtocar / interpretar estos archivos? Estoy en MacOS y he visto esto antes, es un misterio. Creo que solo bash estaría cargando estos archivos.
actualización : bash y sh no son nada fuera de lo común. cuando escribo bash en la terminal, obtengo esto:
alex$ bash
beginning to load .bashrc
finished loading .bashrc
bash-3.2$
cuando escribo shen la terminal, obtengo esto:
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
Alexander Mills
fuente
fuente

sh¿cuál es la fuente del archivo .profile?bashfuente, uno conSTRICT_POSIXel otro sin él.Respuestas:
Ese error ocurre cuando se hace pasar
bashpor un shell POSIX que intenta importar esas funciones del entorno, no cuando las carga interpretando un archivo como~/.bashrco tal. Ejemplo simplificado:Esperaba
bashno cargar funciones del entorno cuando estaba en modo posix, pero lo hace , y solo se queja cuando sus nombres contienen caracteres divertidos.Tenga en cuenta que
bashtambién se ejecutará en modo POSIX cuando elPOSIXLY_CORRECToPOSIX_PEDANTICse establece la variable de entorno, o cuando se compila con--enable-strict-posix-default/STRICT_POSIX.Este último parece ser el caso para
/bin/shel MacOS (ver aquí paraPRODUCT_NAME = sh), donde espero que este error también gatillo cuando el uso de funciones de biblioteca comopopen(3)osystem(3).fuente
shes lo que hizo la shellshock / bashdoor vulnerabilidad de un montón peor.SHELLOPTS=posixy-o posixotras formas de habilitar el modo posix.set -a/set -o allexporttambién hace que bash exporte todas las funciones (y si se invoca comosh, hacePOSIXLY_CORRECTque se configuren y exporten)sh -ahacePOSIXLY_CORRECTque se establezca y se exporte;set -adespués de que se inicióshsin,-ano se exportaPOSIXLY_CORRECTporque se estableció antes de que-aestuviera vigente).Para responder la parte sobre por qué
read.jsonyts-projectno son nombres de funciones portátiles:Según POSIX, una definición de función debe ser nombrada por
También conocido como identificador , en C lingo. O en expresiones regulares:
[_a-zA-Z][0-9_a-zA-Z]*fuente
zsh/rc/fish...)bash, o no importaría funciones del entorno mientras está en modo POSIX, que no es requerido por la especificación POSIX ;-)Entonces, lo que causó fue que obtuve algunos scripts de bash en mi archivo ~ / .bashrc de esta manera:
así que lo cambié a:
así que, en teoría, si se llama para
shentonces, no intentará obtener esos archivos, pero no estoy seguro si funciona el 100% del tiempo.fuente