在 Windows 中,如果创建 .exe 文件或 .bat 的快捷方式,则该文件将在其自己的目录中运行,而不是在快捷方式所在的目录中,但在 Linux 中,指向脚本的链接在与链接所在的同一目录中运行,并且如果所述脚本依赖于其根目录中的文件,这会破坏所有内容,有没有办法在没有 shell 包装器或使用绝对路径的情况下解决这个问题?
我尝试了硬链接和软链接,但它们的结果相同。
答案1
你的观察是错误的。我无法谈论太多关于 Windows 的事情,但在 Linux 上,
指向在与链接相同的目录中运行的脚本的链接
并非如此。指向可执行文件的链接在程序启动的目录中运行。您可以使用以下代码轻松验证这一点:
ln -s /usr/bin/ls /tmp/ls
/tmp/ls
这将输出当前目录的内容,而不是/tmp
不清楚你说的“这会破坏一切”是什么意思。此外,/
除非绝对必要,否则应避免放置文件。
答案2
我有一个指向/ImageStore
已安装数据磁盘上的文件夹的软链接......
这:
$ linkpos="$(find /ImageStore -maxdepth 1 -printf "%l\n")"; ( cd $linkpos ; ls -l)
... 将列出该文件夹的内容。
以类似的方式,您可以从“$linkpos”中提取脚本路径,然后 cd 到该路径并执行该脚本。
您需要的上述信息位于中man bash
,/Parameter Exp
在查看手册页时输入并按 ENTER。