对于正在编写的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
是否可以,或者它可能不便携,我只是运气对我有用?
答案 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
的路径进行硬编码,那么你会使事情变得比他们需要的更脆弱。