![仅当 cd 到脚本目录时运行 sh 文件才有效](https://linux22.com/image/47911/%E4%BB%85%E5%BD%93%20cd%20%E5%88%B0%E8%84%9A%E6%9C%AC%E7%9B%AE%E5%BD%95%E6%97%B6%E8%BF%90%E8%A1%8C%20sh%20%E6%96%87%E4%BB%B6%E6%89%8D%E6%9C%89%E6%95%88.png)
我正在尝试.sh
通过./file.sh
语法运行一个文件。我错误地认为可以运行:
./usr/bin/foo/bar.sh
这只会产生"No such file or directory"
.但是,如果我运行:
cd /usr/bin/foo && ./bar.sh
它工作完美。为什么第一种方法不可行?
(我使用的是Lubuntu 14)
答案1
这 。目录路径开头表示它是从当前工作目录开始的相对路径。如果没有 .它从文件系统根目录开始。
所以你必须/usr/bin/foo/bar.sh
在没有前面的点的情况下运行。
仅当您位于与文件相同的目录中时才需要该点,以将其与 /bin 中具有相同名称的最终现有文件区分开来,该文件可以从任何地方运行而无需添加目录。
答案2
点很重要。
代替:
./usr/bin/foo/bar.sh
使用:
/usr/bin/foo/bar.sh
讨论
考虑:
./usr/bin/foo/bar.sh
这开始于当前的目录 ,./
并查找子目录usr
。如果当前目录不包含此类子目录,您将看到以下消息:
bash: ./usr/bin/foo/bar.sh: No such file or directory
相比之下,请考虑:
cd /usr/bin/foo && ./bar.sh
这完全忽略当前目录并 cd 到/usr/bin/foo
.
答案3
.
表示当前目录。只需像这样运行它:
/usr/bin/foo/bar.sh
当您在.
前面放置 a 时,它会查找:
whateverdirectory/yourein/usr/bin/foo/bar.sh