Как работать с файловыми дескрипторами, хранящимися в переменных?

Предполагая, что GNU dateдоступен, вы можете использовать этот скрипт bash/ ksh93/ zsh:

start=$(date -ud 20170301 "+%s") # start time in epoch time (seconds since Jan. 1st, 1970)
end=$(date -ud 20170831 "+%s") # end time 

for ((i=start; i <= end; i+=86400)); do # 86400 is 24 hours
    runCerclient-layer-name "$(date -ud "@$i" +%Y%m%d)"
done
0
12.07.2019, 05:45
1 ответ

Вы можете

  • 5<&"$fd":продублировать fd $fdна fd 5 (где 5 является буквальным )в любой Bourne -подобной оболочке (хотя имейте в виду, что когда yash находится в режиме posix, это не будет работать, если $fdне открыт для чтения ).
  • {fd}<&-:закрыть фд $fdв зш, баш, кш93

Но вы не можете сделать "$fd">anything, так как вы не хотите, чтобы echo "$something">fileне выводил содержимое $somethingв file, если это содержимое содержит только десятичные цифры.

В zsh, bash и ksh93 вы можете использовать {fd}> somethingдля автоматического выделения fd выше 9 и сохранения в $fd, но это не то, о чем вы просите.

Насколько я знаю, нет другого способа, кроме как использовать eval.

Вы можете ограничить использование evalперенаправлением только с помощьюexec:

(eval "exec $TWO>&1"; exec date) >> logfile

Та же ситуация и в оболочке fish.

Это также верно для rcи производных, где используется синтаксис >[3=5], и оба fd должны быть буквальными.

3
28.01.2020, 02:29

Теги

Похожие вопросы