J'ai un script qui utilise sh
Shell. Je reçois une erreur dans la ligne qui utilise la commande source
. Il semble que source
ne soit pas inclus dans mon sh
Shell.
Si j'essaie explicitement d'exécuter source
à partir de Shell, je reçois:
sh: 1: source: not found
Devrais-je en quelque sorte installer "source"? Ai-je une mauvaise version de sh
?
/bin/sh
est généralement un autre shell essayant d'imiter le shell. Beaucoup de distributions utilisent /bin/bash
pour sh
, il supporte source
. Sur Ubuntu, cependant, /bin/dash
est utilisé mais ne supporte pas source
. La plupart des shells utilisent .
au lieu de source
. Si vous ne pouvez pas éditer le script, essayez de changer le shell qui l’exécute.
Dans Bourne Shell (sh), utilisez le. commande de source d'un fichier
. filename
$ls -l `which sh`
/bin/sh -> dash
$Sudo dpkg-reconfigure dash #Select "no" when you're asked
[...]
$ls -l `which sh`
/bin/sh -> bash
Alors ce sera OK
Le source
intégré est un bashisme. Ecrivez ceci simplement sous la forme .
.
par exemple
. $FILE
# OR you may need to use a relative path (such as in an `npm` script):
. ./$FILE
La commande source
est intégrée à certains shells. Si vous avez un script, il devrait spécifier quel shell utiliser sur la première ligne, tel que:
#!/bin/bash
Ce problème se produit car jenkins Execute Shell exécute le script via son répertoire/bin/sh.
Par conséquent,/bin/sh ne sait pas "source"
Il vous suffit d’ajouter la ligne ci-dessous en haut de votre shell Execute en jenkins
#!/bin/bash
J'ai fait face à cette erreur alors que j'essayais d'appeler la commande source de #Jenkins, exécuter Shell.
source profile.txt
ou source profile.properties
Le remplacement de la commande source est à utiliser,
. ./profile.txt
ou . ./profile.properties
Note: Il y a un espace entre les deux points (.)
source est une commande intégrée de bash. Pour exécuter la commande source, vous pouvez vous connecter en tant que racine.
Sudo -s source ./filename.sh
J'ai trouvé dans un Makefile gnu sur Ubuntu, (où/bin/sh -> bash)
J'avais besoin d'utiliser le. ainsi que spécifier le script cible avec un préfixe ./ (voir exemple ci-dessous)
la source n'a pas fonctionné dans ce cas, je ne sais pas pourquoi, car elle devrait appeler/bin/bash ..
La variable d'environnement My Shell est également définie sur/bin/bash
test:
$(Shell . ./my_script)
Notez que cet exemple n'inclut pas le caractère de tabulation; dû formater pour l'échange de pile.