我需要在 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: not find
答案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}>&-