web-dev-qa-db-fra.com

commande source introuvable dans le shell sh

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?

114
Milad

/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.

100
choroba

Dans Bourne Shell (sh), utilisez le. commande de source d'un fichier

. filename
106
Guru
$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

43
shlsy

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

https://wiki.ubuntu.com/DashAsBinSh#source

20
Travis Clarke

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
8
mah

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
7
Mojtaba Yousefi

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 (.)

1
GangaRam Dewasi

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

1
swati jain

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.

0
Gord Wait