誰かが現象を説明することができると考えています。タイトルが示すように、私はファイル記述子のリダイレクトについて学習しています。途中で、リダイレクト記号の使用を取り巻く問題、特に永続的なリダイレクトを設定するときに、私は質問に出くわしました。私は、特定のケースでは、<
と>
のどちらを使用するかは問題ではないようです。たとえば、次のスクリプトでの作業:私の驚きにBash:ファイル記述子のリダイレクト
#!/bin/bash
#Setting file descriptor 3 to redirect to STDIN
exec 3<&0
#Setting STDIN to read from input file
exec 0<inputFile
while read var
do
echo "$var"
done
#Setting STDIN to read from file descriptor 3 which is redirected to the default STDIN
exec 0<&3
read -p "Enter a word:" word
echo "$word"
が、私が文exec 3<&0
またはexec 0<&3
に>
か<
を使用している場合は関係していないようです。これらのステートメントのいずれかで、リダイレクトシンボルを交換すると、まったく同じ結果が得られるようです。それは私には明白なようで、その行への変更の同じ種類を作る:
exec 0<inputFile
対
exec 0>inputFile
ファイルにSTDINをリダイレクトすると、同じものではありませんので、同じ結果が得られませんファイルをSTDINにリダイレクトします。
だから私の質問は以下のとおりです。>
対
<
:0<&3
対# Why aren't there any differences between these two statements? exec 3<&0 exec 3>&0
3<&0
:# Why is there a difference between these two statements? exec 3<&0 exec 0<&3
このタイプのリダイレクトは、私の頭を包み込み、これらのタイプの不一致なしにまっすぐに保つのに十分なほど難しいです。すべての説明は非常に高く評価されます。
私は穏やかにあなたが尋ねた質問の両方を反映するためにあなたのポストを編集した:あなたは簡単に
strace
ていることを確認することができます。私の変更が気に入らなければ、自由にロールバックしたり編集してください。 –