gpt4 book ai didi

ksh - "test -a file"和 "test file -ef file"的区别

转载 作者:行者123 更新时间:2023-12-04 15:14:07 31 4
gpt4 key购买 nike

QNX (Neutrino 6.5.0) 使用 ksh 的开源实现作为其 shell 。许多提供的脚本,包括系统启动脚本,都使用诸如

if ! test /dev/slog -ef /dev/slog; then
# do something
fi

检查文件系统中是否存在资源管理器。我已经搜索过,只能找到 -ef 的非常枯燥的解释。检查两个参数是否实际上是同一个文件。由于指定的文件名相同,它似乎只是减少检查文件是否存在。

我检查了 test -a 的行为和 test -e (两者似乎都根据我读过的各种文档检查任何类型文件的文件存在)而且它们似乎也有效。
-ef 之间执行的检查是否有任何差异?和 -a/ -e ?正在使用 -ef某种防止文件存在的竞争条件的尝试?

最佳答案

审查 strace在 Ubuntu Linux 的副本 ksh 上显示没有实质性差异。一通电话stat对比两个。

$ strace test /tmp/tmp.geLaoPkXXC -ef /tmp/tmp.geLaoPkXXC

显示了这一点:
mmap(NULL, 7220736, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f11dc80b000
close(3) = 0
stat("/tmp/tmp.geLaoPkXXC", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
stat("/tmp/tmp.geLaoPkXXC", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
close(1) = 0
close(2) = 0

...然而
$  strace test -a /tmp/tmp.geLaoPkXXC

显示了这一点:
fstat(3, {st_mode=S_IFREG|0644, st_size=7220736, ...}) = 0
mmap(NULL, 7220736, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f6b49e2b000
close(3) = 0
stat("/tmp/tmp.geLaoPkXXC", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
close(1) = 0
close(2) = 0

stat对比两个。
$ ksh --version
version sh (AT&T Research) 93u 2011-02-08

关于ksh - "test -a file"和 "test file -ef file"的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11345132/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com