为什么要使用<&;3",&引用;三,-&引用;及;3</文件";在bash-while循环中?它实际上是做什么的?
我正在浏览一个bash脚本,试图找出它是如何工作的,并可能对其进行修补。所讨论的脚本是debian提供的为什么要使用<&;3",&引用;三,-&引用;及;3</文件";在bash-while循环中?它实际上是做什么的?,bash,while-loop,file-descriptor,io-redirection,Bash,While Loop,File Descriptor,Io Redirection,我正在浏览一个bash脚本,试图找出它是如何工作的,并可能对其进行修补。所讨论的脚本是debian提供的cryptroot脚本,该脚本负责在启动时解密块设备。在bash中不完全在家肯定是一个挑战 我找到了这段代码,但我不确定它的作用 if [ -r /conf/conf.d/cryptroot ]; then while read mapping <&3; do setup_mapping "$mapping" 3<&- done 3&
cryptroot
脚本,该脚本负责在启动时解密块设备。在bash中不完全在家肯定是一个挑战
我找到了这段代码,但我不确定它的作用
if [ -r /conf/conf.d/cryptroot ]; then
while read mapping <&3; do
setup_mapping "$mapping" 3<&-
done 3< /conf/conf.d/cryptroot
fi
其中,文件
的输出指向while循环中的读取
,并执行命令
,直到最后一行
我对重定向也有一点了解,例如,我有时用它重定向STDOUT
和STDERR
到/dev/null
之类的东西。但我不确定重定向到3
意味着什么
在阅读了更多关于I/O重定向的内容后,我有了一个接近答案的答案
stdin、stdout和stderr的文件描述符分别为0、1和2,
分别地对于打开其他文件,仍有描述符3
到九点
因此,3“只是”对打开文件的引用,或者:
…只是操作系统分配给打开文件的一个数字
跟踪它。将其视为文件指针的简化类型。
据我所知:
打开3
进行读取,并将其分配给文件描述符3/conf/conf.d/cryptroot
读取映射是
while read LINE do COMMAND done < FILE
人们忘记了命令也在从文件中读取数据,并且可能会使用while循环控制中的读取行时 指挥 完成<文件
读取的数据。为了避免这种情况,一个常见的习惯用法是从不同的文件描述符读取。这是通过read
Re实现的:
setup_mapping“$mapping”3请参见(以及“Linked”侧栏中列出的许多重复项),以了解这可以避免的问题示例。
while read mapping; do setup_mapping "$mapping" done < /conf/conf.d/cryptroot
while read LINE do COMMAND done < FILE