My $PATH looks like this:
/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
In bash, I can without problem invoke wand located in
/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand
like
$ 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
However, in bourne shell compatibility mode, wand cannot be found:
$ wand
sh: 2: wand: not found
It seems like the problem is the % sign in these paths. This sign has been added by URL encoding so the name "GNU/Linux" can be used in the directory name even though it is not a valid filename. Is it possible to get the name working in sh, or make the sh command work as bash. That is, make bash behave the same even though it was invoked with the /bin/sh command, which symlinks to bash anyway.
Best Answer
That's not the Bourne shell, or
bash
emulating the Bourne shell, that's the Almquist shell, in your case probably the Debian Almquist shell (a Linux fork by Debian of BSDs' sh itself based on the original Almquist shell).In the Almquist shell (the original one and the modern versions),
%
is used inPATH
for extra features specific toash
. Quoting from the documentation:Other shells like
ksh
orzsh
have a similar autoloading of functions mechanism, but they use a different variable ($FPATH
), but you can't define which of functions or executables take precedence.In your case,
/home/torbjorr/deployed/vector/x86_64-GNU%2fLinux
is interpreted as the/home/torbjorr/deployed/vector/x86_64-GNU
directory with the2fLinux
flag. That flag is ignored as it is unknown.There is no way around that. Even if ash had an escape mechanism so that this
%
not be treated specially, it would then not work in other shells or other things that look up$PATH
likeexecvp()
.You'll need to remove the
%
characters from$PATH
, so rename your directory or add a symlink.Or don't use
ash
for your/bin/sh
. Other lightweight POSIX shell implementations that don't do that includeyash
andmksh
.