是否可以通过完整路径调用可执行文件“/bin/..."?

时间:2016-04-18 18:32:58

标签: linux unix msys msys2

对于正在编写的RTOS(http://www.distortos.org),我需要在构建配置过程中运行find(来自make menuconfig目标)。对于Windows,我假设用户安装了MSYS2,因此find.exe可用。这个特定文件的唯一问题是Windows在C:/Windows/system32中也有这样的文件(据说它接近grep)。因此,根据PATH环境变量中文件夹的顺序,如果只是尝试通过名称调用文件,则会得到一个或另一个。

我发现从/bin/find或shell脚本中调用此程序为Makefile可以在Windows和(我的)Linux上运行。最重要的是 - 无论find.exe中的文件夹顺序是什么,这样做总是从MSYS2调用PATH。所以我想知道 - 以这种方式拨打find是否可以,或者它可能不便携,我只是运气对我有用?

2 个答案:

答案 0 :(得分:1)

将其称为/usr/bin/find可能更具便携性。例如,在Fedora上/bin实际上是/usr/bin的符号链接,所以要么有效:

bash-4.3$ ls -l /bin/find
-rwxr-xr-x. 1 root root 222608 Dec 28 18:26 /bin/find
bash-4.3$ ls -l /usr/bin/find
-rwxr-xr-x. 1 root root 222608 Dec 28 18:26 /usr/bin/find

但是最近的Ubuntu:

root@69ca68fbe5c0:/# ls -l /bin/find
ls: cannot access /bin/find: No such file or directory
root@69ca68fbe5c0:/# ls -l /usr/bin/find
-rwxr-xr-x. 1 root root 229992 Jan  6  2014 /usr/bin/find

答案 1 :(得分:1)

我建议不要对find的路径进行硬编码,而是指示Windows用户必须在MSYS2环境中运行脚本。 MSYS2将自己的bin目录放在路径的开头附近,以便find始终获得MSYS2版本而不是Microsoft版本。

如果你对find的路径进行硬编码,那么你会使事情变得比他们需要的更脆弱。