如何在shell中將變數值作為fd傳遞

如何在shell中將變數值作為fd傳遞

我需要在 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}>&-

相關內容