Je reçois celui-ci lorsque j'ouvre une session de terminal:
sh: erreur lors de l'importation de la définition de fonction pour `read.json '
sh: erreur lors de l'importation de la définition de fonction pour `ts-project '
sh n'aime pas ces fonctions car elles ressemblent à:
read.json(){
::
}
et
ts-project(){
::
}
la vraie question est - pourquoi sh
toucher / interpréter ces fichiers? Je suis sur MacOS et j'ai déjà vu ça, c'est un tel mystère. Je pense que seul bash chargerait ces fichiers.
mise à jour : bash et sh n'ont rien d'extraordinaire. quand je tape bash dans le terminal, j'obtiens ceci:
alex$ bash
beginning to load .bashrc
finished loading .bashrc
bash-3.2$
quand je tape sh
dans le terminal, j'obtiens ceci:
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
la source
la source
sh
- être quelles sont les sources du fichier .profile?bash
source, l'un avecSTRICT_POSIX
, l'autre sans.Réponses:
Cette erreur se produit lorsque le
bash
masquage comme un shell POSIX essaie d'importer ces fonctions à partir de l'environnement, pas lors de leur chargement en interprétant un fichier comme~/.bashrc
ou tel. Exemple simplifié:Je m'attendais à
bash
ne pas charger les fonctions de l'environnement en mode posix, mais il le fait et ne se plaint que lorsque leurs noms contiennent des caractères amusants.Notez que
bash
cela s'exécutera également en mode posix lorsque la variable d'environnementPOSIXLY_CORRECT
orPOSIX_PEDANTIC
est définie, ou lorsqu'elle a été compilée avec--enable-strict-posix-default
/STRICT_POSIX
.Ce dernier semble être le cas pour
/bin/sh
le MacOS (voir ici pourPRODUCT_NAME = sh
), où j'attends cette erreur de déclencher également lors de l' utilisation des fonctions de bibliothèque commepopen(3)
ousystem(3)
.la source
sh
est ce qui a rendu la vulnérabilité shellshock / bashdoor bien pire.SHELLOPTS=posix
et-o posix
pour d'autres façons d'activer le mode posix.set -a
/set -o allexport
oblige également bash à exporter toutes les fonctions (et s'il est invoqué commesh
, provoquePOSIXLY_CORRECT
sa définition et son exportation!)sh -a
causesPOSIXLY_CORRECT
à fixer et exportés,set -a
aprèssh
sans-a
a démarré n'exporte pasPOSIXLY_CORRECT
parce qu'il a été mis en avant-a
était en vigueur).Pour répondre à la partie expliquant pourquoi
read.json
etts-project
ne sont pas des noms de fonction portables:Selon POSIX, une définition de fonction doit être nommée par
Également connu sous le nom d' identifiant , en langage C. Ou en regex:
[_a-zA-Z][0-9_a-zA-Z]*
la source
zsh
/rc
/fish
...)bash
, ou il n'importerait pas de fonctions de l'environnement en mode POSIX, ce qui n'est pas requis par la spécification POSIX ;-)Donc, ce qui a causé cela, c'est que je cherche des scripts bash dans mon fichier ~ / .bashrc comme ceci:
donc je l'ai juste changé en:
donc en théorie, s'il est appelé par,
sh
il n'essaiera pas de source ces fichiers, mais pas sûr si cela fonctionne à 100% du temps.la source