我需要在我的 Linux Shell 上一次打开多个文件,因此考虑将序列值作为 fd 值传递,如下所示:
在我的密码中,我有名为 nile.300、nile.301、....nile.500 的文件
因此我想使用 fd 300 打开 nile.300,将 nile.301 作为 fd 301 打开,依此类推
#!/bin/bash
for i in {300..500};do FILENAME=nile.$i
# Opening file descriptors # 3 for reading and writing
# i.e. /tmp/out.txt
exec $i<>$FILENAME
# Write to file
echo "Today is $(date)" >&$i
done
sleep 10;
for i in {300..500};do
# close fd # 3
exec $i>&-
done
但是脚本无法运行,./fd.sh: 第 5 行:exec: 300:未找到
答案1
除非您计划同时处理所有打开的文件,否则最好一次处理一个文件。
这种方法无需同时打开数百个文件,从而有可能达到打开文件数的限制。
for i in {300..500};do
FILENAME=nile.$i
exec 3<>$FILENAME
# Write to file
echo "Today is $(date)" >&3
# Close
exec 3>&-
done
答案2
{variable}
如果它在左侧,则正确的语法是:
exec {i}<>"$FILENAME"
echo "Today is $(date)" >&$i
exec {i}>&-