Redirección de flujo de E / S en un shell de Linux. ¿Cómo procesa el shell un comando con redirección?

Actualmente estoy codificando una pequeña shell (redirección, tuberías, exec, etc.). He estado intentando averiguar los pasos que toma el shell de Linux para abordar la redirección de E / S.

Algunas preguntas sobre lo que necesito ayuda en:

¿En qué dirección lee el shell desde la línea de comandos cuando está buscando la redirección? De izquierda a derecha o lo contrario? Utiliza recursion?

¿Cuáles son los casos que el shell debe buscar? (No estoy seguro de si hay muchas o solo una pareja que pueda abarcar muchas variaciones)

De todos modos, algunos en los que puedo pensar son (corrígeme si me equivoco):

cmd > file1       # stdout of cmd goes to file

cmd file1 > file2 # stdout of cmd with file1 as an argument goes to file2

cmd file2 < file1 # stdin on file2 comes from file1

Ahora no conozco el proceso en los siguientes casos (como en cómo el shell los busca y los maneja). Los pasos que toma la concha son desconocidos para mí.

cmd file2 > file3  < file1 # using "tee" in place of "cmd" I don't know
                           # how to do the dups and when to exec

cmd file2 < file3 > file1  # same ^

Respuestas a la pregunta(1)

Su respuesta a la pregunta