相关疑难解决方法(0)

测试文件描述符是否有效

我想让 bash 脚本在文件描述符(FD)打开时将附加信息输出到大于或等于 3 的文件描述符(FD)。为了测试 FD 是否打开,我设计了以下技巧:

if (printf '' 1>&3) 2>&-; then
  # File descriptor 3 is open
else
  # File descriptor 3 is not open
fi
Run Code Online (Sandbox Code Playgroud)

这足以满足我的需求,但我很好奇是否有更惯用的方法来测试 FD 是否有效。我特别是约是否存在所述的映射感兴趣fcntl(1)系统调用到外壳命令,这将允许FD标志的检索(O_WRONLYO_RDWR测试的FD是否可写,和O_RDONLYO_RDWR测试的FD是否可读)。

bash file-descriptors

17
推荐指数
2
解决办法
1万
查看次数

检查文件描述符是否引用已删除的文件(在 Bash 中)

我想检查文件描述符指向的文件是否在 Bash (linux) 中被删除。

我已经阅读了Testing if a filedescriptor is validTesting if a filedescriptor is valid (for input)。但是这些答案对这个略有不同的问题没有帮助。

我使用以下测试用例:

# create file
echo hello > /tmp/test.txt

# open read-only fd
exec 3< /tmp/test.txt

# delete file
rm /tmp/test.txt

# special zero-timeout to check if data available for reading
if read -u 3 -t 0
then
    echo "data available for reading"
else
    echo "no data available"
fi

# close fd (clean up)
exec 3<&-
Run Code Online (Sandbox Code Playgroud)

这个脚本出人意料地表明“数据可供阅读”。但是,该文件不再存在。所以必须进行一些缓存/缓冲。也许还有另一种方法,或者避免缓冲区/缓存?

一个有效的替代方法是:ls -l …

linux bash file-descriptors

4
推荐指数
2
解决办法
1254
查看次数

标签 统计

bash ×2

file-descriptors ×2

linux ×1