我清楚地记得读到过,当 $PATH 不包含工作目录时,Linux 脚本调用需要路径,即使路径是./
,因此脚本调用是./script.sh
显然,14.04.3 LTS 并非如此,这是script.sh
调用。
什么情况下./
需要?
> echo '#!/bin/bash' > test.sh
> echo 'pwd' >> test.sh
> cat test.sh
#!/bin/bash
pwd
> chmod +x test.sh
> test.sh
/home/brian/Desktop/test
> ./test.sh
/home/brian/Desktop/test
> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/brian/Documents/bashscripts:
> echo 'pwd' > test2.sh
> chmod +x test2.sh
> test2.sh
/home/brian/Desktop/test
> echo "$PATH" | od -c
0000000 / u s r / l o c a l / s b i n :
0000020 / u s r / l o c a l / b i n : /
0000040 u s r / s b i n : / u s r / b i
0000060 n : / s b i n : / b i n : / h o
0000100 m e / b r i a n / D o c u m e n
0000120 t s / b a s h s c r i p t s : \n
0000140
>
答案1
原因是您$PATH
以 a 结尾,:
它会自动将当前工作目录附加到PATH
。
因此你需要删除尾随的:
export PATH="${PATH%:}"
例子:
$ PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:
$ bar.sh
Foobar
$ PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ bar.sh
bar.sh: command not found