sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-04 15:14:07 31 4
mua khóa gpt4 Nike

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

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


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

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

1 Câu trả lời

审查 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
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com