ファイルから行ごとに読み込むシェルスクリプトとして書かれたコードの一部が見つかりました。ファイルからの読み取り中にexecコマンドの重要性
BAKIFS=$IFS
IFS=$(echo -en "\n\b")
exec 3<&0
exec 0<"$FILE"
while read -r line
do
# use $line variable to process line in processLine() function
processLine $line
done
exec 0<&3
# restore $IFS which was used to determine what the field separators are
IFS=$BAKIFS
3つのexecコマンドの必要性を理解できません。誰かが私のためにそれを精巧にすることはできますか?また、ファイルからの1回の読み込みのたびに$ ifs変数がリセットされますか?
ありがとうございます。私は、このスクリプトをバックグラウンドでサーバー上で実行すると仮定します。whileループの期間中、標準入力は3に設定されます。これは、標準入力を使用できないことを意味しますかその期間の他のプログラムを読むには?この依存関係を削除するための任意のアイデア? – ayush
そのファイルハンドルは_process_に属し、システム全体のリソースではありません。たとえば、すべてのプロセスは、他のプロセスと競合することなく、独自の標準入力(ファイルハンドル0)を取得します。だから、もしあなたがそれとは別のプログラムを実行しているのであれば、いいえ。もちろん、プロセスの中では、whileループ内の "実際の" stdinから別の行を読み込むことはできません(たとえば、ファイルの次の行を取得するため)。 – paxdiablo
もう一度ありがとう...今私はそれを得た。 – ayush