Mi $ PATH se ve así:
/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, puedo sin problema invocar la varita ubicada en
/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand
me gusta
$ 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
Sin embargo, en el modo de compatibilidad de bourne shell, no se puede encontrar la varita:
$ wand
sh: 2: wand: not found
Parece que el problema es el signo% en estas rutas. Este signo se ha agregado mediante codificación de URL para que el nombre "GNU / Linux" se pueda usar en el nombre del directorio aunque no sea un nombre de archivo válido. ¿Es posible hacer que el nombre funcione en sh, o hacer que el comando sh funcione como bash? Es decir, hacer que bash se comporte igual a pesar de que se invocó con el comando / bin / sh, que de todos modos se vincula a bash.

sh(está bien enbashyzshaunque). Llamar directamente al ejecutable funciona ensh; muy extraño.Respuestas:
Ese no es el shell Bourne, o
bashemular el shell Bourne, es el shell Almquist, en su caso, probablemente, el shell Debian Almquist (una bifurcación Linux de Debian de la propia BSD basada en el shell Almquist original).En el shell Almquist (el original y las versiones modernas),
%se utilizaPATHpara funciones adicionales específicas paraash. Citando de la documentación:A otros shells les gusta
kshozshtienen un mecanismo similar de carga automática de funciones, pero usan una variable diferente ($FPATH), pero no puedes definir qué funciones o ejecutables tienen prioridad.En su caso,
/home/torbjorr/deployed/vector/x86_64-GNU%2fLinuxse interpreta como el/home/torbjorr/deployed/vector/x86_64-GNUdirectorio con la2fLinuxbandera. Esa bandera se ignora ya que se desconoce.No hay forma de evitar eso. Incluso si la ceniza tenía un mecanismo de escape para que esta
%no se trata de forma especial, que sería entonces no funciona en otros proyectiles u otras cosas que mirar hacia arriba$PATHcomoexecvp().Tendrá que eliminar los
%caracteres$PATH, así que cambie el nombre de su directorio o agregue un enlace simbólico.O no lo uses
ashpara tu/bin/sh. Otras implementaciones ligeras de shell POSIX que no hacen eso incluyenyashymksh.fuente
shviola el estándar POSIX. Dado que el punto de tener un separadoshes exactamente que debes asegurarte de no tropezar con alguna extensión de shell incompatible (supongo que nadie usa/bin/shcomo shell de inicio de sesión en estos días), lo consideraría un error.ashfor / bin / sh es más para evitar la penalización de rendimiento del usobash, por lo que usaryashomksh(oposhsi desea excluir todas las extensiones) sigue siendo una mejor opción que usarbash. Además, uno puede considerarlo un caso de esquina. Nadie normalmente tendría%un componente de ruta. La mayoría de los depósitos tienen esquinas en las que no cumplen con POSIX.[comando aunque ese carácter no esté en el PFCS.