linux - 使用完整路径 "/bin/..."调用可执行文件是否可移植?

标签 linux unix msys msys2

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

我发现从 Makefile 或在 shell 脚本中将此程序调用为 /bin/find 在 Windows 和(我的)Linux 上都有效。最重要的是 - 这样做总是从 MSYS2 调用 find.exe,无论 PATH 中文件夹的顺序是什么。所以我想知道 - 以这种方式调用 find 是否可以,或者它不是可移植的,我只是很幸运它适合我?

最佳答案

将其称为 /usr/bin/find 可能更便于携带。例如,在 Fedora 上,/bin 实际上是 /usr/bin 的符号链接(symbolic link),因此两者都有效:

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

关于linux - 使用完整路径 "/bin/..."调用可执行文件是否可移植?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36701733/

相关文章:

mingw - 在 MinGW/MSYS 上进行安装不喜欢 --prefix=/mingw

C# 命令行参数和 ls

c++ - MinGW 编译器错误 - 如何设置 MSYS bat?

linux - 系统调用sync()的引用不明确

linux - 如何在 unix/Linux 中比较和替换多个文件的整行

linux - unix - awk - 在用户定义的函数中打印参数名称

linux - 在 Bash 脚本中将单词定义为变量

控制台输出未对齐

linux - 警告 : the use of `tmpnam' is dangerous, 更好地使用 `mkstemp'

java - 如果我使用 swapoff -a 关闭交换并使用 RandomAccessFile 写入一些数据,它会每次刷新到磁盘吗?