Ich erhalte diese, wenn ich eine Terminalsitzung öffne:
sh: Fehler beim Importieren der Funktionsdefinition für "read.json"
sh: Fehler beim Importieren der Funktionsdefinition für "ts-project"
sh mag diese Funktionen nicht, weil sie so aussehen:
read.json(){
::
}
und
ts-project(){
::
}
Die eigentliche Frage ist: Warum werden sh
diese Dateien berührt / interpretiert? Ich bin auf MacOS und habe das schon einmal gesehen, es ist so ein Rätsel. Ich würde denken, nur Bash würde diese Dateien laden.
Update : Bash und Sh sind nichts Außergewöhnliches. Wenn ich bash in das Terminal eingebe, erhalte ich Folgendes:
alex$ bash
beginning to load .bashrc
finished loading .bashrc
bash-3.2$
Wenn ich sh
das Terminal eingebe, erhalte ich Folgendes:
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
quelle
quelle
sh
die .profile-Datei?bash
Quelle gebaut, die eine mitSTRICT_POSIX
, die andere ohne.Antworten:
Dieser Fehler tritt auf, wenn beim
bash
Maskieren als POSIX-Shell versucht wird, diese Funktionen aus der Umgebung zu importieren, nicht beim Laden, indem eine Datei wie diese interpretiert wird~/.bashrc
. Vereinfachtes Beispiel:Ich hatte erwartet
bash
, im Posix-Modus keine Funktionen aus der Umgebung zu laden, aber das tut es und beschwert sich nur, wenn ihre Namen lustige Zeichen enthalten.Beachten Sie, dass dies
bash
auch im Posix-Modus ausgeführt wird, wenn die VariablePOSIXLY_CORRECT
oderPOSIX_PEDANTIC
umgebungs festgelegt ist oder wenn sie mit--enable-strict-posix-default
/ kompiliert wurdeSTRICT_POSIX
.Diese letztere scheint der Fall zu sein ,
/bin/sh
auf MacOS (Blick hier fürPRODUCT_NAME = sh
), wo ich auch Trigger diesen Fehler erwarten , wenn Bibliothek Funktionen wiepopen(3)
odersystem(3)
.quelle
sh
ist , was die Shellshock / bashdoor Verwundbarkeit ein gemachter viel schlimmer.SHELLOPTS=posix
und-o posix
für andere Möglichkeiten, den Posix-Modus zu aktivieren.set -a
/set -o allexport
auch bash veranlasst, alle Funktionen zu exportieren (und wenn es als aufgerufen wirdsh
, bewirktPOSIXLY_CORRECT
, dass es gesetzt und exportiert wird!)sh -a
bewirktPOSIXLY_CORRECT
, dass festgelegt und exportiert wird;set -a
nach dem Start vonsh
without-a
wird nicht exportiert,POSIXLY_CORRECT
da es vor dem-a
Inkrafttreten festgelegt wurde).Um den Teil zu beantworten, warum
read.json
undts-project
sind keine tragbaren Funktionsnamen:Nach POSIX, eine Funktionsdefinition muss benannt nach
Im C-Jargon auch als Kennung bekannt . Oder in Regex:
[_a-zA-Z][0-9_a-zA-Z]*
quelle
zsh
/rc
/fish
...)bash
, oder es würde keine Funktionen aus der Umgebung importieren, während im POSIX-Modus, was von der POSIX-Spezifikation nicht erforderlich istWas es verursacht hat, war, dass ich einige Bash-Skripte in meiner ~ / .bashrc-Datei wie folgt beschaffe:
Also habe ich es einfach geändert in:
Wenn es also bis dahin aufgerufen wird,
sh
wird es theoretisch nicht versuchen, diese Dateien zu beschaffen, aber nicht sicher, ob dies 100% der Zeit funktioniert.quelle