3 votes

Le fichier source sh ne peut pas trouver les fichiers

J'ai une installation Ubuntu 20.04. Il semble que je ne peux pas sourcer des fichiers avec sh, qui est le dash par défaut d'Ubuntu.

J'ai un fichier, disons build.env, avec des variables d'environnement dedans comme ceci :

build.env:

SOMEVAR=something
A_VAR=some_value

Je peux sourcer ceci sur bash avec . build.env ou source build.env. Si j'essaie . build.env avec sh, cependant, j'obtiens

sh: 1: .: build.env: introuvable. 

Je peux stat ou cat le fichier, mais je ne peux pas le sourcer. Pourquoi?

5voto

Kamil Maciorowski Points 57004

La commande . (point) est requise par POSIX, elle devrait fonctionner dans n'importe quelle implémentation de sh. L'erreur que vous avez reçue

.: build.env: introuvable.

vient en effet de .. C'est build.env qui n'est pas trouvé.

Cela est dû au fait que votre sh respecte la spécification :

Si fichier ne contient pas de , le shell utilise le chemin de recherche spécifié par PATH pour trouver le répertoire contenant fichier.

Dans votre cas, build.env n'est nulle part dans les répertoires spécifiés par votre PATH. Vous avez besoin de

. ./build.env

pour sourcer build.env qui se trouve dans le répertoire de travail actuel.

Notes :

  • . (builtin) dans Bash se comporte comme si PATH contenait . (répertoire de travail actuel) à la fin. Cela signifie que . build.env fonctionnerait effectivement dans Bash. C'est probablement la raison pour laquelle vous vous attendiez à ce que cela fonctionne dans sh.
  • POSIX ne spécifie pas source.
  • cat build.env (ou stat build.env etc.) est différent de . build.env car cat n'utilise pas PATH pour localiser build.env. Pour lui, build.env signifie ./build.env.

0 votes

Je ne m'attendais pas à ce que les différentes commandes trouvent les fichiers de manière différente. Merci, c'est ce dont j'avais besoin.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X