
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 goto
era una utilidad separada, por lo que no forma parte del shell Thompson per se.
Cuando invocas el shell Thomson como:
sh the-script
sh
se abre the-script
en stdin
(fd 0) como si hubieras escrito
sh < the-script
en cambio.
El goto
comando seek
volverá 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 goto
comando, su script también funcionará bash
si invoca su script de shell Thomson como:
bash < the-script
ksh93
puede emular eso goto
con 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 ksh93
como:
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 goto
comando V6) ksh93
cuando se invoquen como:
ksh93 < the-script