Pourcentage dans la variable d'environnement $ PATH

Mon $ PATH ressemble à ceci:

/home/torbjorr/deployed/vector/x86_64-GNU%2fLinux:/home/torbjorr/deployed/typewriter/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mustudio/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mathext/x86_64-GNU%2fLinux:/home/torbjorr/deployed/doxymax/x86_64-GNU%2fLinux:/home/torbjorr/deployed/c2tex/x86_64-GNU%2fLinux:/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand:/home/torbjorr/deployed/x86_64-GNU%2fLinux/spellesc:/home/torbjorr/deployed/x86_64-GNU%2fLinux/projinit:/home/torbjorr/deployed/x86_64-GNU%2fLinux/herbs:/home/torbjorr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 

En bash, je peux sans problème invoquer baguette située dans

 /home/torbjorr/deployed/x86_64-GNU%2fLinux/wand 

comme

 $ wand (i) Mål från "main.cpp" har registrerats (i) Skapar katalog "__wand_targets_dbg" (i) Kör g++ "main.cpp" -fpic -L"/home/torbjorr/deployed" -g -Wall -std=c++11 -I"/home/torbjorr/deployed" -o "__wand_targets_dbg/cb-template 

Cependant, en mode de compatibilité bourne shell, la baguette ne peut pas être trouvée:

 $ wand sh: 2: wand: not found 

Il semble que le problème est le signe% dans ces paths. Ce signe a été ajouté par enencoding d'URL, de sorte que le nom "GNU / Linux" peut être utilisé dans le nom du directory même s'il ne s'agit pas d'un nom de file valide. Est-il possible d'get que le nom fonctionne dans sh, ou que la command sh fonctionne comme bash. C'est-à-dire que make bash se comporte de la même façon, même si elle a été invoquée avec la command / bin / sh, qui symbolise de toute façon les liens symboliques vers bash.

Ce n'est pas le shell Bourne, ou bash émule le shell Bourne, c'est la coquille Almquist, dans votre cas probablement le shell Debian Almquist (une twig Linux de Debian de BSDs elle-même basée sur la coquille d'origine Almquist).

Dans la coquille Almquist (l'original et les versions modernes), % est utilisé dans PATH pour les fonctionnalités supplémentaires spécifiques à la ash . Citant de la documentation:

Path Search

Lors de la localization d'une command, le shell search d'abord s'il a une fonction shell de ce nom. Ensuite, si PATH ne contient pas d'input pour %builtin , il search une command embeddede de ce nom. Enfin, il search chaque input dans PATH à son tour pour la command.

La valeur de la variable PATH doit être une série d'inputs séparées par des deux-points. Chaque input se compose d'un nom de directory ou d'un nom de directory suivi d'un indicateur commençant par un signe de pourcentage. Le directory actuel doit être indiqué par un nom de directory vide. Si aucun signe de pourcentage n'est présent, l'input amène le shell à searchr la command dans le directory spécifié. Si le drapeau est %builtin la list des commands internes shell est recherchée. Si le drapeau est %func le directory est recherché pour un file lu en input du shell. Ce file doit définir une fonction dont le nom est le nom de la command recherchée.

Les noms de command contenant une barre oblique sont simplement exécutés sans effectuer aucune des searchs ci-dessus.

D'autres shells comme ksh ou zsh ont un mécanisme de chargement automatique similaire des fonctions, mais ils utilisent une variable différente ( $FPATH ), mais vous ne pouvez pas définir quelles fonctions ou exécutables ont priorité.

Dans votre cas, /home/torbjorr/deployed/vector/x86_64-GNU%2fLinux est interprété comme le /home/torbjorr/deployed/vector/x86_64-GNU avec l'indicateur 2fLinux . Ce drapeau est ignoré car il est inconnu.

Il n'y a pas de path aux alentours. Même si les cendres avaient un mécanisme d'échappement pour que ce % ne soit pas traité spécialement, cela ne fonctionnerait pas dans d'autres coquilles ou d'autres choses qui searchnt $PATH comme execvp() .

Vous devrez supprimer les % caractères de $PATH , renommez votre directory ou ajoutez un lien symbolique.

Ou n'utilisez pas de ash pour votre /bin/sh . D'autres implémentations de shell léger POSIX qui ne le font pas incluent yash et mksh .