¿Cómo cambia la entrada estándar la ejecución de un archivo?

¿Cómo cambia la entrada estándar la ejecución de un archivo?

Imagine que tengo un script que contiene el comando goto.

El comando goto buscará en elentrada estándarpara una línea como esta : jumpHere.

Pero la entrada estándar es por defecto el terminal. Sólo tiene sentido si el archivo/script es la entrada estándar para el comando goto.Entonces, ¿dónde/quién/qué está cambiando la entrada estándar?

PD. Estoy hablando del antiguo Thompson-Shell, Unix v6.

Respuesta1

Tenga en cuenta que gotoera una utilidad separada, por lo que no forma parte del shell Thompson per se.

Cuando invocas el shell Thomson como:

sh the-script

shse abre the-scripten stdin(fd 0) como si hubieras escrito

sh < the-script

en cambio.

El gotocomando seekvolverá al principio (lo que obviamente, si stdin fuera una terminal y no un archivo normal, no funcionaría), luego buscará la etiqueta allí y dejaría el cursor en el archivo justo después de eso. Entonces el caparazón continuaría desde allí.

Si desea que un comando en su secuencia de comandos lea lo que era originalmente la entrada estándar, usaría el <-operador de redirección especial:

cmd <- 

Tenga en cuenta que con ese mismo gotocomando, su script también funcionará bashsi invoca su script de shell Thomson como:

bash < the-script

ksh93puede emular eso gotocon especialbuscandoOperadores de redireccionamiento. Por ejemplo, este script de shell de Thomson:

echo Start
: start
ls -ld /proc/self/fd/0
sleep 1
goto start
echo End never reached

Podría escribirse ksh93como:

echo Start
: start
ls -ld /proc/self/fd/0
sleep 1
exec <#((0)) <#": start"
echo End never reached

Ambos se ejecutarían (siempre que tenga el gotocomando V6) ksh93cuando se invoquen como:

ksh93 < the-script

información relacionada