Añadir vínculos

This commit is contained in:
Tuxliban Torvalds 2023-12-29 05:57:24 -06:00
parent 227ca28fcf
commit e5cccf9191
11 changed files with 50 additions and 50 deletions

Binary file not shown.

View File

@ -5,14 +5,14 @@ El punto de partida para todo lo relacionado con el shell de Korn es \url{http:/
\begin{description}
\item[Información] Al hacer clic en este enlace, se accede a una descripción general de una página sobre el shell de Korn.
\item[Software] Al hacer clic en este enlace, se encuentran enlaces al sitio de descargas de AT\&T (ver la siguiente sección), algún código de ejemplo, un artículo en línea para \emph{dtksh} y un enlace para \emph{tksh}. Estos dos últimos se describen en el Apéndice A.
\item[Software] Al hacer clic en este enlace, se encuentran enlaces al sitio de descargas de AT\&T (ver la siguiente sección), algún código de ejemplo, un artículo en línea para \emph{dtksh} y un enlace para \emph{tksh}. Estos dos últimos se describen en el \hyperref[sec:ApendiceA]{Apéndice A}.
\item[Documentación] Este enlace lleva a una página con enlaces a información en línea, incluida información general, páginas de manual tanto para \emph{ksh88} como para \emph{ksh93}, libros y referencias sobre el shell de Korn, y documentos sobre el shell de Korn de diversas conferencias.
\item[Recursos] Una lista de enlaces a otros recursos en la web para \emph{ksh} y muchos de los otros shells descritos en el Apéndice A, como \emph{bash} y \emph{dtksh}.
\item[Recursos] Una lista de enlaces a otros recursos en la web para \emph{ksh} y muchos de los otros shells descritos en el \hyperref[sec:ApendiceA]{Apéndice A}, como \emph{bash} y \emph{dtksh}.
\item[Diversión] David G. Korn, el programador, se encuentra con KoRN, el grupo de rock. Dicho y hecho.
\end{description}
\section{Lo que puedes descargar}
\url{http://www.research.att.com/sw/download} es el punto de partida para descargar el software de \emph{ksh}. El software está cubierto por una licencia de estilo de código abierto. La versión actual de la licencia se encuentra en \url{http://www.research.att.com/sw/license/ast-open.html}. Esta licencia se reproduce en el Apéndice D. Deberías leerla y entenderla primero; si sus términos no son aceptables para ti, no deberías descargar el código fuente o binarios del software desde el sitio web de AT\&T.
\url{http://www.research.att.com/sw/download} es el punto de partida para descargar el software de \emph{ksh}. El software está cubierto por una licencia de estilo de código abierto. La versión actual de la licencia se encuentra en \url{http://www.research.att.com/sw/license/ast-open.html}. Esta licencia se reproduce en el \hyperref[sec:ApendiceD]{Apéndice D}. Deberías leerla y entenderla primero; si sus términos no son aceptables para ti, no deberías descargar el código fuente o binarios del software desde el sitio web de AT\&T.
El software en el sitio web de AT\&T está disponible en diferentes <<paquetes>>, la mayoría de los cuales tienen nombres con el prefijo <<ast>>, que significa \emph{Advanced Software Tools} (Herramientas de Software Avanzado). Los paquetes de origen vienen como archivos \emph{tar} comprimidos con \emph{gzip}, usando el sufijo de nombre de archivo \emph{.tgz}. Elige uno o más de los siguientes paquetes para descargar:
@ -22,7 +22,7 @@ El software en el sitio web de AT\&T está disponible en diferentes <<paquetes>>
\item[INIT] Este paquete debe descargarse al construir cualquiera de los siguientes paquetes fuente. Contiene los archivos y estructuras de directorio en los que dependen las herramientas y el sistema de construcción de AST.
\item[ast-ksh] Este paquete construye solo la infraestructura de soporte (bibliotecas, programas de prueba de entorno, etc.) para \emph{ksh} y el ejecutable \emph{ksh}. Es lo más sencillo de construir.
\item[ast-base] Este paquete construye todo en el paquete \emph{ast-ksh} y algunas herramientas AST básicas adicionales. En particular, incluye \emph{pax}, una herramienta de archivado que combina funciones de \emph{tar(1)} y \emph{cpio(1)}, y \emph{nmake}, una versión significativamente mejorada del programa estándar \emph{make(1)} de Unix. También incluye las bibliotecas \emph{sfio} (Safe Fast I/O) y \emph{ast}, que puedes usar para tus propios programas.
\item[ast-open] Este paquete construye todo en el paquete ast-base y muchas herramientas adicionales. Ten en cuenta que \emph{tksh} (ver Apéndice A) está incluido en este paquete.
\item[ast-open] Este paquete construye todo en el paquete ast-base y muchas herramientas adicionales. Ten en cuenta que \emph{tksh} (ver \hyperref[sec:ApendiceA]{Apéndice A}) está incluido en este paquete.
\end{description}
Cada uno de los paquetes (excepto \emph{INIT}) también está disponible como binarios precompilados. La Tabla C-1 enumera las arquitecturas disponibles para estos paquetes. También hay traducciones de locales para algunos locales y algunos programas.

View File

@ -61,11 +61,11 @@ A menos que acepte una licencia para utilizar el Software de AT\&T, no debe desc
\item Los derechos de autor de AT\&T en el \textbf{Código Fuente}, una licencia no exclusiva y totalmente pagada para preparar y distribuir \textbf{Parches} para el \textbf{Código Fuente}.
\end{enumerate}
\item Sujeto a los términos y condiciones de este Acuerdo, puedes crear un hipervínculo entre un sitio web de Internet de tu propiedad y controlado por ti y el \textbf{Sitio web}, que describa de manera justa y de buena fe dónde se pueden obtener la \textbf{Cápsula} y el \textbf{Código Fuente}, siempre que no enmarques el \textbf{Sitio web} ni des la falsa impresión de que AT\&T está de alguna manera asociado, respalda o patrocina tu sitio web. Cualquier buena voluntad asociada con dicho hipervínculo será para el único beneficio de AT\&T. Además de la creación de dicho hipervínculo, nada en este Acuerdo se interpretará como que te confiere el derecho de usar cualquier referencia a AT\&T, sus nombres comerciales, marcas comerciales, marcas de servicio o cualquier otro indicio de origen propiedad de AT\&T, o indicar que tus productos o servicios están de alguna manera patrocinados, aprobados o respaldados por, o afiliados con, AT\&T.
\item Excepto según se establece expresamente en la Sección 3.1 anterior, no se otorgan ni otros derechos ni licencias bajo ninguna \textbf{IPR} de AT\&T ni, por implicación, impedimento o de otra manera, se confieren. A modo de ejemplo únicamente, no se otorgan ni se confieren derechos ni licencias bajo ninguna de las patentes de AT\&T ni, por implicación, impedimento o de otra manera, con respecto a ninguna parte de un \textbf{Producto Derivado} que no sea un \textbf{Software} compilado a partir de alguna parte, sin \textbf{cambios}, del \textbf{Código Fuente}.
\item Excepto según se establece expresamente en la \hyperref[sec:31]{Sección 3.1} anterior, no se otorgan ni otros derechos ni licencias bajo ninguna \textbf{IPR} de AT\&T ni, por implicación, impedimento o de otra manera, se confieren. A modo de ejemplo únicamente, no se otorgan ni se confieren derechos ni licencias bajo ninguna de las patentes de AT\&T ni, por implicación, impedimento o de otra manera, con respecto a ninguna parte de un \textbf{Producto Derivado} que no sea un \textbf{Software} compilado a partir de alguna parte, sin \textbf{cambios}, del \textbf{Código Fuente}.
\end{enumerate}
\item TUS OBLIGACIONES
\begin{enumerate}
\item Si distribuyes \textbf{Materiales de Construcción} (incluido si estás obligado a hacerlo en virtud de este Acuerdo), debes asegurarte de que el destinatario celebre y acepte debidamente un acuerdo contigo que incluya los términos mínimos establecidos en el Apéndice A (\url{http://www.research.att.com/sw/license/ast-terms.html}) (completado para indicar que eres el LICENCIANTE) y ninguna otra disposición que, en opinión de AT\&T, entre en conflicto con tus obligaciones según, o el propósito de, este Acuerdo. El acuerdo requerido en virtud de esta Sección 4.1 puede estar en forma electrónica y puede distribuirse con los \textbf{Materiales de Construcción} de una manera tal que el destinatario acepte el acuerdo mediante el uso o la instalación de los \textbf{Materiales de Construcción}. Si algún \textbf{Código Adicional} contenido en tus \textbf{Materiales de Construcción} incluye \textbf{Software} que obtuviste bajo licencia, el acuerdo también incluirá detalles completos sobre la licencia y cualquier restricción u obligación asociada con dicho \textbf{Software}.
\item Si distribuyes \textbf{Materiales de Construcción} (incluido si estás obligado a hacerlo en virtud de este Acuerdo), debes asegurarte de que el destinatario celebre y acepte debidamente un acuerdo contigo que incluya los términos mínimos establecidos en el \hyperref[sec:ApendiceA]{Apéndice A} (\url{http://www.research.att.com/sw/license/ast-terms.html}) (completado para indicar que eres el LICENCIANTE) y ninguna otra disposición que, en opinión de AT\&T, entre en conflicto con tus obligaciones según, o el propósito de, este Acuerdo. El acuerdo requerido en virtud de esta Sección 4.1 puede estar en forma electrónica y puede distribuirse con los \textbf{Materiales de Construcción} de una manera tal que el destinatario acepte el acuerdo mediante el uso o la instalación de los \textbf{Materiales de Construcción}. Si algún \textbf{Código Adicional} contenido en tus \textbf{Materiales de Construcción} incluye \textbf{Software} que obtuviste bajo licencia, el acuerdo también incluirá detalles completos sobre la licencia y cualquier restricción u obligación asociada con dicho \textbf{Software}.
\item Si preparas un Parche que distribuyes a cualquier otra persona, debes:
\begin{enumerate}
\item Ponerte en contacto con AT\&T, según se pueda proporcionar en el \textbf{Sitio web} o en un archivo de texto incluido con el \textbf{Código Fuente}, y describir para AT\&T dicho \textbf{Parche} y proporcionar a AT\&T una copia de dicho \textbf{Parche} según lo indique AT\&T; o,
@ -91,7 +91,7 @@ A menos que acepte una licencia para utilizar el Software de AT\&T, no debe desc
\begin{enumerate}
\item No presentarás contra AT\&T, sus afiliados o representantes autorizados ningún reclamo por infracción o apropiación indebida de cualquier \textbf{propiedad intelectual} o derechos de marca de alguna manera relacionados con el \textbf{Código Fuente}, incluidos aquellos relacionados con cualquier \textbf{Parche}.
\item En caso de que alguna disposición de este Acuerdo se considere ilegal o inaplicable, AT\&T puede, pero no está obligada a, publicar en el \textbf{sitio web} una nueva versión de este Acuerdo que, en opinión de AT\&T, preserve razonablemente la intención de este Acuerdo.
\item Tus derechos y licencia (pero no tus obligaciones) bajo este Acuerdo se terminarán automáticamente en caso de que (a) se publique en el \textbf{sitio web} un aviso de una reclamación no frívola de un tercero relacionada con el \textbf{Código Fuente} o la \textbf{Cápsula}, (b) tengas conocimiento de dicha reclamación, (c) alguna de tus representaciones o garantías en el Artículo 1.0 o la Sección 8.4 sean falsas o inexactas, (d) excedas los derechos y la licencia otorgados o (e) no cumplas completamente con cualquier disposición de este Acuerdo. Nada en esta disposición se interpretará para restringirte, a tu opción y sujeto a la ley aplicable, de reemplazar la parte del \textbf{Código Fuente} que sea objeto de una reclamación de un tercero con código no infractor o de negociar de manera independiente los derechos necesarios con el tercero.
\item Tus derechos y licencia (pero no tus obligaciones) bajo este Acuerdo se terminarán automáticamente en caso de que (a) se publique en el \textbf{sitio web} un aviso de una reclamación no frívola de un tercero relacionada con el \textbf{Código Fuente} o la \textbf{Cápsula}, (b) tengas conocimiento de dicha reclamación, (c) alguna de tus representaciones o garantías en el Artículo 1.0 o la \hyperref[sec:84]{Sección 8.4} sean falsas o inexactas, (d) excedas los derechos y la licencia otorgados o (e) no cumplas completamente con cualquier disposición de este Acuerdo. Nada en esta disposición se interpretará para restringirte, a tu opción y sujeto a la ley aplicable, de reemplazar la parte del \textbf{Código Fuente} que sea objeto de una reclamación de un tercero con código no infractor o de negociar de manera independiente los derechos necesarios con el tercero.
\item Reconoces que el \textbf{Código Fuente} y la \textbf{Cápsula} pueden estar sujetos a las leyes y regulaciones de exportación de EE. UU. y, en consecuencia, garantizas a AT\&T que no violarás, directa o indirectamente, ninguna ley o regulación de exportación de los EE. UU. aplicable.
\item Sin limitar ninguno de los derechos de AT\&T en virtud de este Acuerdo o por ley o en equidad, ni ampliar de otra manera el alcance de la licencia y los derechos otorgados en virtud del presente, si no cumples con alguna de tus obligaciones bajo este Acuerdo con respecto a cualquiera de tus \textbf{Parches} o \textbf{Productos Derivados}, o si realizas cualquier acto que exceda el alcance de la licencia y los derechos otorgados en este documento, entonces dichos \textbf{Parches, Productos Derivados} y actos no están licenciados ni autorizados en virtud de este Acuerdo y dicho incumplimiento también se considerará una violación de este Acuerdo. Además de cualquier otro remedio disponible por cualquier violación de tus obligaciones bajo este Acuerdo, AT\&T tendrá derecho a una orden judicial que te obligue a cumplir con dichas obligaciones.
\item Este Acuerdo se regirá e interpretará de acuerdo con las leyes del Estado de Nueva York, EE. UU., sin tener en cuenta sus reglas de conflictos de leyes. Este Acuerdo será interpretado de manera justa de acuerdo con sus términos y sin ninguna interpretación estricta a favor o en contra de AT\&T o de ti. Cualquier demanda o procedimiento que presentes en relación con este Acuerdo deberá presentarse y tramitarse únicamente en Nueva York, Nueva York, EE. UU.

View File

@ -95,7 +95,7 @@ Si nada de lo anterior funciona, puede recurrir a editar el archivo \emph{/etc/p
\section{Uso Interactivo del Shell}
Cuando usas el shell de forma interactiva, entras en una sesión de inicio de sesión que comienza cuando te conectas y termina cuando sales o presionas CTRL-D.\footnote{Puedes configurar tu shell para que no acepte CTRL-D, es decir, que requiera que escribas \texttt{exit} para terminar tu sesión. Recomendamos esto, porque CTRL-D es demasiado fácil de escribir por accidente; vea la sección de opciones en el \hyperref[sec:Chapter3]{Capítulo 3}.}
Durante una sesión de inicio de sesión, escribes líneas de comando en el shell; estas son líneas de texto que terminan en ENTER y que escribes en tu terminal o estación de trabajo.\footnote{Aunque asumimos que hay pocas personas que todavía usan terminales seriales reales, los sistemas modernos de ventanas proporcionan acceso al shell a través de un emulador de terminal. Por lo tanto, al menos cuando se trata del uso interactivo del shell, el término <<terminal>> se aplica igualmente a un entorno de ventanas.}
Por defecto, el shell te pide cada comando con un signo de dólar, aunque, como verás en el Capítulo 3, el prompt puede ser cambiado.
Por defecto, el shell te pide cada comando con un signo de dólar, aunque, como verás en el \hyperref[sec:Chapter3]{Capítulo 3}, el prompt puede ser cambiado.
\subsection{Comandos, Argumentos y Opciones}
Las líneas de comandos del shell consisten en una o más palabras, que se separan en una línea de comandos por espacios o TABs. La primera palabra de la línea es el comando. El resto (si lo hay) son argumentos (también llamados parámetros) del comando, que son nombres de cosas sobre las que actuará el comando.
@ -756,7 +756,7 @@ La notación \^{}X significa CTRL-X.
\center
\caption{Teclas de control}
\label{Tab:1-7}
\begin{tabular}{m{3cm}|m{2cm}|m{9cm}} \hline
\begin{tabular}{m{3.5cm}|m{2cm}|m{9cm}} \hline
\textbf{Tecla de control} & \textbf{Nombre de stty} & \textbf{Descripción de la función} \\ \hline
CTRL-C & intr & Detiene el comando actual \\
CTRL-D & eof & Detiene el comando actual \\

View File

@ -60,13 +60,13 @@ Encontrará que los modos de edición \emph{vi} y \emph{emacs} son buenos emulan
Antes de entrar en detalles, vale la pena mencionar otros dos puntos que se aplican a ambos modos de edición:
\begin{itemize}
\item{\emph{ksh} indica que una línea es más ancha que su pantalla marcando la última columna de la línea visible con un carácter especial: < indica que hay más texto a la izquierda de lo que se ve actualmente, > indica que hay más texto a la derecha de lo que se ve, y * indica que hay texto a ambos lados de lo que se ve actualmente.
\item \emph{ksh} indica que una línea es más ancha que su pantalla marcando la última columna de la línea visible con un carácter especial: < indica que hay más texto a la izquierda de lo que se ve actualmente, > indica que hay más texto a la derecha de lo que se ve, y * indica que hay texto a ambos lados de lo que se ve actualmente.
\begin{lstlisting}[language=bash]
print this is a very long line that just runs on and >
\end{lstlisting}
}
\item{La personalización de los modos de edición de \emph{ksh93} es posible pero requiere el conocimiento de características avanzadas que aún no hemos cubierto. Consulte el \hyperref[sec:Chapter10]{Capítulo 10} para más detalles.\footnote{El shell de dominio público Korn, \emph{bash} y \emph{zsh} tienen modos de edición personalizables, pero de forma diferente a \emph{ksh93}. Véase el Apéndice A.}}
\item La personalización de los modos de edición de \emph{ksh93} es posible pero requiere el conocimiento de características avanzadas que aún no hemos cubierto. Consulte el \hyperref[sec:Chapter10]{Capítulo 10} para más detalles.\footnote{El shell de dominio público Korn, \emph{bash} y \emph{zsh} tienen modos de edición personalizables, pero de forma diferente a \emph{ksh93}. Véase el \hyperref[sec:ApendiceA]{Apéndice A.}}
\end{itemize}
\section{El Archivo Histórico}
@ -110,7 +110,7 @@ Los hábitos básicos del modo \emph{emacs} son fáciles de aprender, pero requi
El primero de ellos es el uso de CTRL-B y CTRL-F para avanzar y retroceder el cursor. Estas teclas tienen la ventaja de ser mnemotécnicas obvias, pero mucha gente prefiere usar las teclas de flecha que hay en casi todos los teclados hoy en día.
Desafortunadamente, el modo \emph{emacs} no usa las teclas de dirección,\footnote{De hecho, como se describe en el Apéndice B, a partir de \emph{ksh93h}, si su terminal utiliza secuencias de escape estándar ANSI para las teclas de flecha, puede utilizarlas.} porque los códigos que transmiten al ordenador no están completamente estandarizados; el modo \emph{emacs} fue diseñado para funcionar en la mayor variedad posible de terminales sin la pesada personalización que necesita el Emacs completo. Casi los únicos requisitos de hardware del modo \emph{emacs} son que el carácter ESPACIO sobrescriba el carácter sobre el que se escribe, y que RETROCESO se mueva a la izquierda sin sobrescribir el carácter actual.
Desafortunadamente, el modo \emph{emacs} no usa las teclas de dirección,\footnote{De hecho, como se describe en el \hyperref[sec:ApendiceB]{Apéndice B}, a partir de \emph{ksh93h}, si su terminal utiliza secuencias de escape estándar ANSI para las teclas de flecha, puede utilizarlas.} porque los códigos que transmiten al ordenador no están completamente estandarizados; el modo \emph{emacs} fue diseñado para funcionar en la mayor variedad posible de terminales sin la pesada personalización que necesita el Emacs completo. Casi los únicos requisitos de hardware del modo \emph{emacs} son que el carácter ESPACIO sobrescriba el carácter sobre el que se escribe, y que RETROCESO se mueva a la izquierda sin sobrescribir el carácter actual.
En modo \emph{emacs}, el punto (a veces también llamado punto) es un lugar imaginario justo a la izquierda del carácter sobre el que está el cursor. En las descripciones de los comandos de la Tabla 2-1, algunos dicen <<hacia delante>> mientras que otros dicen <<hacia atrás>>. Piensa en adelante como <<a la derecha del punto>> y atrás como <<a la izquierda del punto>>.
@ -698,7 +698,7 @@ $ (*\highlight{m}*)ake myprogram
Para buscar <<man>> de nuevo, puede escribir \texttt{n}, que realiza otra búsqueda hacia atrás utilizando la última cadena de búsqueda. Escribiendo / de nuevo sin un argumento y pulsando ENTER se consigue lo mismo.
El comando \texttt{G} recupera el comando cuyo número es el mismo que el prefijo numérico del argumento que proporcione. \texttt{G} depende del esquema de numeración de comandos descrito en la Sección 3.4.2.3, en el \hyperref[sec:Chapter3]{Capítulo 3}. Sin un argumento de prefijo, va al comando número 1. Esto puede ser útil para los antiguos usuarios del intérprete de comandos C que todavía quieran utilizar números de comando.
El comando \texttt{G} recupera el comando cuyo número es el mismo que el prefijo numérico del argumento que proporcione. \texttt{G} depende del esquema de numeración de comandos descrito en la \hyperref[sec:3423]{Sección 3.4.2.3}, en el \hyperref[sec:Chapter3]{Capítulo 3}. Sin un argumento de prefijo, va al comando número 1. Esto puede ser útil para los antiguos usuarios del intérprete de comandos C que todavía quieran utilizar números de comando.
\subsection{Comandos de Búsqueda de Caracteres}
Hay algunos comandos de movimiento adicionales en el modo vi. Estos comandos le permiten moverse a la posición de un carácter particular en la línea. Se resumen en la Tabla \ref{tab2.13}, en la que x denota cualquier carácter.

View File

@ -15,9 +15,9 @@ Los medios más básicos de personalización que proporciona el shell de Korn so
También hay formas más complejas de personalizar tu entorno, principalmente la capacidad de programar el shell, que veremos en capítulos posteriores. En este capítulo, cubrimos las técnicas listadas arriba.
Mientras que la mayoría de las personalizaciones obtenibles con las técnicas anteriores son sencillas y se aplican al uso diario de Unix, otras son más bien arcanas y requieren un profundo conocimiento técnico para entenderlas. La mayor parte de este capítulo se concentra en las primeras. Debido a que queremos explicar las cosas desde la perspectiva de las tareas que puede querer realizar, más que desde la de las características específicas del shell de Korn, puede que se nos escapen algunos pequeños detalles (como opciones varias para ciertos comandos). Le sugerimos que busque este tipo de información en el Apéndice B.
Mientras que la mayoría de las personalizaciones obtenibles con las técnicas anteriores son sencillas y se aplican al uso diario de Unix, otras son más bien arcanas y requieren un profundo conocimiento técnico para entenderlas. La mayor parte de este capítulo se concentra en las primeras. Debido a que queremos explicar las cosas desde la perspectiva de las tareas que puede querer realizar, más que desde la de las características específicas del shell de Korn, puede que se nos escapen algunos pequeños detalles (como opciones varias para ciertos comandos). Le sugerimos que busque este tipo de información en el \hyperref[sec:ApendiceB]{Apéndice B}.
\section{El Archivo .profile}
\section{El Archivo .profile}\label{sec:31}
Si quieres personalizar tu entorno, lo más importante es que conozcas un fichero llamado \emph{.profile} en tu directorio home (login). Este es un archivo de comandos de shell, también llamado script de shell, que el shell de Korn lee y ejecuta cada vez que inicias sesión en tu sistema.
Si utilizas una máquina grande en una oficina o departamento, lo más probable es que el administrador del sistema ya haya configurado un fichero \emph{.profile} para ti que contiene algunas cosas estándar. Este es uno de los ficheros <<ocultos>> mencionados en el \hyperref[sec:Chapter1]{Capítulo 1}; otros ficheros ocultos comunes son \emph{.xinitrc} (para el sistema X Window), \emph{.emacs} (para el editor GNU Emacs) y \emph{.mailrc} (para el programa de correo de Unix).
@ -163,7 +163,7 @@ alias cd='cd '
Esto hace que el shell de Korn busque un alias para el argumento de nombre de directorio a \emph{cd}, que en el ejemplo anterior le permitiría expandir el alias \emph{cm} correctamente.
El shell de Korn proporciona una característica de eficiencia llamada <<alias rastreados>>. Retrasaremos la discusión de estos hasta la Sección 3.4.2.8. Además, varios alias están predefinidos por el shell; están listados en el Apéndice B.
El shell de Korn proporciona una característica de eficiencia llamada <<alias rastreados>>. Retrasaremos la discusión de estos hasta la \hyperref[sec:3428]{Sección 3.4.2.8}. Además, varios alias están predefinidos por el shell; están listados en el \hyperref[sec:ApendiceB]{Apéndice B}.
Por último, existen algunos complementos útiles para el comando \emph{alias} básico. Si escribe \texttt{alias name} sin un signo igual (=) y value, el shell imprime el valor del alias o \emph{name:} \texttt{alias not found} si no está definido. Si escribe \emph{alias} sin ningún argumento, obtendrá una lista de todos los alias que haya definido, así como de varios que están incorporados. Si escribe \texttt{alias -p}, el shell imprime todos sus alias, con cada uno precedido por la palabra clave \emph{alias}. Esto es útil para guardar todos sus alias de forma que el shell pueda volver a leerlos en otro momento. El comando \texttt{unalias} \emph{name} elimina cualquier definición de alias para su argumento. Si escribe \texttt{unalias -a}, el shell elimina todos los alias.
@ -193,12 +193,12 @@ La Tabla \ref{tab3.1} lista las opciones que son útiles para los usuarios gener
\emph{noclobber} & No permita que la redirección de salida (>) destruya un archivo existente. \\\hline
\emph{noglob} & No expanda los comodines de nombre de archivo como * y ? (la expansión de comodines a veces se denomina \emph{globbing}). \\\hline
\emph{nounset} & Indicar un error al intentar utilizar una variable que no está definida. \\\hline
\emph{trackall} & Activar el seguimiento de alias. (En realidad, el shell ignora la configuración de esta opción; el seguimiento de alias siempre está activado. Esto se discute en la Sección 3.4.2.8, más adelante en este capítulo). \\\hline
\emph{trackall} & Activar el seguimiento de alias. (En realidad, el shell ignora la configuración de esta opción; el seguimiento de alias siempre está activado. Esto se discute en la \hyperref[sec:3428]{Sección 3.4.2.8}, más adelante en este capítulo). \\\hline
\emph{vi} & Entra en el modo de edición vi. \\\hline
\end{tabular}
\end{table}
Existen otras opciones (22 en total; el Apéndice B las enumera). Para comprobar el estado de una opción, escriba \emph{set -o}. El shell de Korn imprime una lista de todas las opciones junto con su configuración. No existe un comando para probar opciones individuales, pero aquí hay una simple función del shell para hacerlo:
Existen otras opciones (22 en total; el \hyperref[sec:ApendiceB]{Apéndice B} las enumera). Para comprobar el estado de una opción, escriba \emph{set -o}. El shell de Korn imprime una lista de todas las opciones junto con su configuración. No existe un comando para probar opciones individuales, pero aquí hay una simple función del shell para hacerlo:
\begin{lstlisting}[language=bash]
function testopt {
@ -210,7 +210,7 @@ function testopt {
}
\end{lstlisting}
Las funciones de shell se tratan en el próximo capítulo. Por ahora, sin embargo, si desea utilizar la función \emph{testopt}, simplemente escríbala en su archivo \emph{.profile} o de entorno (consulte la Sección 3.5.2, más adelante en este capítulo), escriba \texttt{login} o \texttt{. .profile}. (Sí, el punto, o <<dot>>, es en realidad un comando; vea la \hyperref[sec:4.1]{Sección 4.1} en el \hyperref[sec:Chapter]{Capítulo 4}.) Luego puede escribir \emph{testopt optionname} para comprobar el estado de una opción.
Las funciones de shell se tratan en el próximo capítulo. Por ahora, sin embargo, si desea utilizar la función \emph{testopt}, simplemente escríbala en su archivo \emph{.profile} o de entorno (consulte la \hyperref[sec:352]{Sección 3.5.2}, más adelante en este capítulo), escriba \texttt{login} o \texttt{. .profile}. (Sí, el punto, o <<dot>>, es en realidad un comando; vea la \hyperref[sec:4.1]{Sección 4.1} en el \hyperref[sec:Chapter]{Capítulo 4}.) Luego puede escribir \emph{testopt optionname} para comprobar el estado de una opción.
\section{Variables de Shell}
Hay varias características de su entorno que puede que desee personalizar pero que no pueden expresarse como una opción on/off. Las características de este tipo se especifican en variables de shell. Las variables de shell pueden especificarlo todo, desde la cadena del prompt hasta la frecuencia con la que el shell comprueba si hay correo nuevo.
@ -279,7 +279,7 @@ Esto se vuelve especialmente importante cuando empezamos a tratar con variables
Las comillas dobles también permiten que funcionen otros caracteres especiales, como veremos en el \hyperref[sec:Chapter4]{Capítulo 4}, el \hyperref[sec:Chapter6]{Capítulo 6} y el \hyperref[sec:Chapter7]{Capítulo 7}. Pero por ahora, revisaremos la regla <<En caso de duda, use comillas simples>> del capítulo 1 añadiendo: ''...a menos que una cadena contenga una variable, en cuyo caso deberá usar comillas dobles>>.
\subsection{Variables Incorporadas}
Al igual que con las opciones, algunas variables incorporadas al shell son significativas para los usuarios generales de Unix, mientras que otras son arcanos para los programadores profesionales. Aquí veremos las más útiles en general, y dejaremos algunas de las más oscuras para capítulos posteriores. De nuevo, el Apéndice B contiene una lista completa.
Al igual que con las opciones, algunas variables incorporadas al shell son significativas para los usuarios generales de Unix, mientras que otras son arcanos para los programadores profesionales. Aquí veremos las más útiles en general, y dejaremos algunas de las más oscuras para capítulos posteriores. De nuevo, el \hyperref[sec:ApendiceB]{Apéndice B} contiene una lista completa.
\subsubsection{Edición de Variables de Modo}
Varias variables del shell se relacionan con los modos de edición de la línea de comandos que vimos en el capítulo anterior. Éstas se enumeran en la Tabla \ref{tab3.2}.
@ -396,7 +396,7 @@ $ junk # Ejecutar el programa
_ is /tmp/junk
\end{lstlisting}
\subsubsection{Variables de prompt}
\subsubsection{Variables de prompt}\label{sec:3423}
Si has visto trabajar a suficientes usuarios experimentados de Unix, puede que ya te hayas dado cuenta de que el prompt del shell no está grabado en piedra. Parece que uno de los pasatiempos favoritos de los programadores profesionales de Unix es pensar en cadenas de prompt bonitas o innovadoras. Te daremos algo de la información que necesitas para hacer la tuya aquí; el resto viene en el próximo capítulo.
En realidad, el shell de Korn utiliza cuatro cadenas de prompt. Se almacenan en las variables \texttt{PS1}, \texttt{PS2}, \texttt{PS3} y \texttt{PS4}. La primera de ellas se llama prompt primario; es el prompt habitual del shell, y su valor por defecto es \texttt{"\$ "} (un signo de dólar seguido de un espacio). A mucha gente le gusta establecer su prompt primario a algo que contenga su nombre de usuario. Esta es una forma de hacerlo:
@ -542,7 +542,7 @@ PATH="$HOME/bin:$PATH"
Esto es menos seguro porque estás confiando en que tu propia versión del comando \emph{more} funcione correctamente. Pero también es arriesgado, ya que podría permitir caballos de Troya (similar al ejemplo de \emph{ls} que acabamos de ver). Si tu directorio \emph{bin} es escribible por otros en tu sistema, pueden instalar un programa que haga algo desagradable.
El uso apropiado de \texttt{PATH} es sólo uno de los muchos aspectos de la seguridad del sistema. Vea el \hyperref[sec:Chapter10]{Capítulo 10} para más detalles. En resumen, recomendamos dejar el directorio actual fuera de su \texttt{PATH} (tanto implícita como explícitamente), añadir su directorio \emph{bin} personal al final de \texttt{PATH}, y asegurarse de que sólo usted puede crear, eliminar o cambiar archivos en su directorio \emph{bin} personal.
\subsubsection{PATH y Alias Rastreados}
\subsubsection{PATH y Alias Rastreados}\label{sec:3428}
Vale la pena señalar que una búsqueda a través de los directorios en su \texttt{PATH} puede tomar tiempo. No morirá exactamente si aguanta la respiración durante el tiempo que la mayoría de los ordenadores tardan en buscar en su \texttt{PATH}, pero el gran número de operaciones de E/S de disco implicadas en algunas búsquedas en el \texttt{PATH} pueden llevar más tiempo que el que tarda en ejecutarse el comando invocado.
El shell de Korn proporciona una forma de eludir las búsquedas \texttt{PATH}, llamada alias rastreado. En primer lugar, observe que si especifica un comando indicando su ruta completa, el intérprete de órdenes ni siquiera utilizará su \texttt{PATH}, sino que irá directamente al archivo ejecutable. Los alias rastreados hacen esto automáticamente. La primera vez que invocas un comando, el shell busca el ejecutable de la forma normal (a través de \texttt{PATH}). A continuación, crea un alias para la ruta completa, de modo que la próxima vez que invoque el comando, el intérprete de comandos utilice la ruta completa y no se preocupe por el \texttt{PATH}. Si alguna vez cambias tu \texttt{PATH}, el shell marca los alias rastreados como <<indefinidos>>, de modo que vuelve a buscar las rutas completas cuando invoques los comandos correspondientes.
@ -658,7 +658,7 @@ La segunda línea del código anterior está pensada para sistemas que no tienen
Puede averiguar qué variables son de entorno y cuáles son sus valores escribiendo \emph{export} sin argumentos.
\subsection{El Archivo de Entorno}
\subsection{El Archivo de Entorno}\label{sec:352}
Aunque las variables de entorno siempre son conocidas por los subprocesos, hay que indicar explícitamente al shell qué otras variables, opciones, alias, etc., deben comunicarse a los subprocesos. La forma de hacerlo es poner todas esas definiciones en un archivo especial llamado \emph{archivo de entorno} en lugar de su \emph{.profile}.
Puede llamar al archivo de entorno como desee, siempre que establezca la variable de entorno \texttt{ENV} con el nombre del archivo. La forma habitual de hacerlo es la siguiente:

View File

@ -49,7 +49,7 @@ Otras cuestiones relacionadas con los subprocesos del shell son demasiado comple
\subsection{Funciones}
La característica de función del shell de Korn es una versión ampliada de una facilidad similar en el shell de Bourne del Sistema V y algunos otros shells. Una función es una especie de script dentro de un script; se usa para definir algún código del shell por su nombre y almacenarlo en la memoria del shell, para ser invocado y ejecutado más tarde.
Las funciones mejoran significativamente la programabilidad del shell, por dos razones principales. En primer lugar, cuando invoca una función, ésta ya se encuentra en la memoria del shell (excepto en el caso de las funciones cargadas automáticamente; consulte la Sección 4.1.1.1, más adelante en este capítulo); por lo tanto, una función se ejecuta más rápidamente. Los ordenadores modernos tienen mucha memoria, así que no hay necesidad de preocuparse por la cantidad de espacio que ocupa una función típica. Por esta razón, la mayoría de la gente define tantas funciones como sea posible en lugar de tener muchos scripts a su alrededor.
Las funciones mejoran significativamente la programabilidad del shell, por dos razones principales. En primer lugar, cuando invoca una función, ésta ya se encuentra en la memoria del shell (excepto en el caso de las funciones cargadas automáticamente; consulte la \hyperref[sec:4111]{Sección 4.1.1.1}, más adelante en este capítulo); por lo tanto, una función se ejecuta más rápidamente. Los ordenadores modernos tienen mucha memoria, así que no hay necesidad de preocuparse por la cantidad de espacio que ocupa una función típica. Por esta razón, la mayoría de la gente define tantas funciones como sea posible en lugar de tener muchos scripts a su alrededor.
La otra ventaja de las funciones es que son ideales para organizar largos scripts de shell en <<trozos>> modulares de código que son más fáciles de desarrollar y mantener. Si no eres programador, pregúntale a uno cómo sería la vida sin funciones (también llamadas \emph{procedimientos} o \emph{subrutinas} en otros lenguajes) y probablemente te echarán la bronca.
@ -120,7 +120,7 @@ Por compatibilidad con el shell de Bourne del Sistema V, el shell de Korn predef
En el resto de este libro nos referiremos principalmente a los scripts, pero a menos que indiquemos lo contrario, debes asumir que todo lo que digamos se aplica igualmente a las funciones.
\subsubsection{Carga Automática de Funciones}
\subsubsection{Carga Automática de Funciones}\label{sec:4111}
A primera vista, parecería que el mejor lugar para poner sus propias definiciones de funciones es en su archivo \emph{.profile} o de entorno. Esto es genial para el uso interactivo, ya que su shell de inicio de sesión lee \texttt{\~{}/.profile}, y otros shells interactivos leen el fichero de entorno. Sin embargo, cualquier script de shell que escriba no lee ninguno de los dos archivos. Además, a medida que tu colección de funciones crece, también lo hacen tus archivos de inicialización, haciendo que sea difícil trabajar con ellos.
\emph{ksh93} soluciona estos dos problemas integrando la búsqueda de funciones con la búsqueda de comandos. Así es como funciona:
@ -821,9 +821,9 @@ Las tres construcciones deben aparecer dentro de los corchetes de una expresión
El shell de Korn soporta todas estas características dentro de sus facilidades de concordancia de patrones. Los nombres de clases de caracteres POSIX son los más útiles, porque funcionan en diferentes localizaciones.
La siguiente sección compara las expresiones regulares del shell de Korn con las características análogas de \emph{awk} y \emph{egrep}. Si no está familiarizado con ellas, vaya a la Sección 4.5.3.
La siguiente sección compara las expresiones regulares del shell de Korn con las características análogas de \emph{awk} y \emph{egrep}. Si no está familiarizado con ellas, vaya a la \hyperref[sec:453]{Sección 4.5.3}.
\subsubsection{Korn Shell Versus Expresiones Regulares awk/egrep}\label{sec:5423}
\subsubsection{Korn Shell Versus Expresiones Regulares awk/egrep}\label{sec:4523}
La Tabla \ref{Tab: operadores} es una expansión de la Tabla \ref{Tab: expresiones}: la columna del medio muestra los equivalentes en \emph{awk/egrep} de los operadores de expresiones regulares del shell.
\begin{table}[h]
@ -915,7 +915,7 @@ Las opciones son una o ambas \emph{i} para la coincidencia independiente de may
La expresión entre paréntesis \texttt{[[:word:]]} es una abreviatura de \texttt{[[:alnum:]\_]}. Es una conveniencia notacional, pero que puede aumentar la legibilidad del programa.
Dentro de las expresiones entre paréntesis, \emph{ksh} reconoce todas las secuencias de escape estándar ANSI C y tienen su significado habitual. (Consulte la Sección 7.3.3.1 , en el \hyperref[sec:Chapter7]{Capítulo 7}). Además, las secuencias de escape enumeradas en la Tabla \ref{Tab_exp} se reconocen y se pueden usar para la comparación de patrones.
Dentro de las expresiones entre paréntesis, \emph{ksh} reconoce todas las secuencias de escape estándar ANSI C y tienen su significado habitual. (Consulte la \hyperref[sec:7.3.3.1]{Sección 7.3.3.1}, en el \hyperref[sec:Chapter7]{Capítulo 7}). Además, las secuencias de escape enumeradas en la Tabla \ref{Tab_exp} se reconocen y se pueden usar para la comparación de patrones.
\begin{table}[h]
\center
@ -934,7 +934,7 @@ Dentro de las expresiones entre paréntesis, \emph{ksh} reconoce todas las secue
¡Uf! Todo esto es bastante embriagador. Si te sientes un poco abrumado, no te preocupes. A medida que aprendas más sobre expresiones regulares y programación en el shell y empieces a realizar tareas de procesamiento de texto cada vez más complejas, llegarás a apreciar el hecho de poder hacer todo esto dentro del propio shell, en lugar de tener que recurrir a programas externos como \texttt{sed, awk} o \emph{perl}.
\subsection{Operadores de Coincidencia de Patrones}
\subsection{Operadores de Coincidencia de Patrones}\label{sec:453}
La Tabla \ref{Tab_Op} enumera los operadores de concordancia de patrones del shell de Korn.
\begin{table}[h]
\center
@ -953,21 +953,23 @@ Pueden ser difíciles de recordar, así que aquí tienes un práctico recurso mn
El uso clásico de los operadores de concordancia de patrones es la eliminación de componentes de los nombres de ruta, como prefijos de directorio y sufijos de nombres de archivo. Con esto en mente, aquí hay un ejemplo que muestra cómo funcionan todos los operadores. Supongamos que la variable \emph{path} tiene el valor \texttt{/home/billr/mem/long.file.name}; entonces:
\begin{table}[h]
\center
\begin{tabular}{|p{3cm}|p{7cm}|} \hline
\textbf{Expresión} & \textbf{Resultado} \\ \hline
\texttt{\$\{path\#\#/*/\}} & \texttt{long.file.name} \\
\texttt{\$\{path\#/*/\}} & \texttt{billr/mem/long.file.name} \\
\texttt{\$path} & \texttt{/home/billr/mem/long.file.name} \\
\texttt{\$\{path\%.*\}} & \texttt{/home/billr/mem/long.file} \\
\texttt{\$\{path\%\%.*\}} & \texttt{/home/billr/mem/loang} \\
\end{tabular}
\end{table}
\begin{longtable}[h]{|p{3cm}|p{9cm}|}
\hline
\textbf{Expresión} & \textbf{Resultado} \\\hline
\endfirsthead
\hline
\textbf{Expresión} & \textbf{Resultado} \\\hline
\endhead
\texttt{\$\{path\#\#/*/\}} & \hspace{4cm} \texttt{long.file.name} \\
\texttt{\$\{path\#/*/\}} & \hspace{2cm} \texttt{billr/mem/long.file.name} \\
\texttt{\$path} & \texttt{/home/billr/mem/long.file.name} \\
\texttt{\$\{path\%.*\}} & \texttt{/home/billr/mem/long.file} \\
\texttt{\$\{path\%\%.*\}} & \texttt{/home/billr/mem/loang} \\\hline
\end{longtable}
Los dos patrones utilizados aquí son \texttt{/*/}, que coincide con cualquier cosa entre dos barras, y \emph{.*}, que coincide con un punto seguido de cualquier cosa.
A partir de \emph{ksh93l}, estos operadores establecen automáticamente la variable de array \texttt{.sh.match.} Esto se discute en la Sección 4.5.7, más adelante en este capítulo.
A partir de \emph{ksh93l}, estos operadores establecen automáticamente la variable de array \texttt{.sh.match.} Esto se discute en la \hyperref[sec:457]{Sección 4.5.7}, más adelante en este capítulo.
Incorporaremos uno de estos operadores en nuestra próxima tarea de programación, \hyperref[box:4-2]{Tarea 4-2}.
@ -1114,7 +1116,7 @@ En el capítulo 6 se describen otros operadores relacionados con las variables d
\subsection{Operadores de longitud}
Hay tres operadores restantes sobre variables. Uno es \texttt{\$\{\#varname\}}, que devuelve el número de caracteres de la cadena.\footnote{Puede ser mayor que el número de bytes para juegos de caracteres multibyte.} (En el \hyperref[sec:Chapter6]{Capítulo 6} veremos cómo tratar éste y otros valores similares como números reales para poder usarlos en expresiones aritméticas). Por ejemplo, si \emph{filename} tiene el valor \emph{fred.c}, entonces \texttt{\$\{\#filename\}} tendría el valor 6. Los otros dos operadores (\texttt{\$\{\#array[*]\}} y \texttt{\$\{\#array[@]\}}) tienen que ver con las variables de array, que también se tratan en el \hyperref[sec:Chapter6]{Capítulo 6}.
\subsection{La variable \emph{.sh.match}}
\subsection{La variable \emph{.sh.match}}\label{sec:457}
La variable \texttt{.sh.match} se introdujo en \emph{ksh93l}. Es una matriz indexada (véase el \hyperref[sec:Chapter6]{Capítulo 6}), cuyos valores se establecen cada vez que se realiza una operación de coincidencia de patrones en una variable, como \texttt{\$\{filename\%\%*/\}}, con cualquiera de los operadores \#, \% (para la coincidencia más corta), o \#\#, \%\% (para la coincidencia más larga), o / y // (para sustituciones). \texttt{.sh.match[0]} contiene el texto que coincide con el patrón completo. \texttt{.sh.match[1]} contiene el texto que coincide con la primera subexpresión entre paréntesis, \texttt{.sh.match[2]} el texto que coincide con la segunda, y así sucesivamente. Los valores de \texttt{.sh.match} dejan de ser válidos (es decir, no intente utilizarlos) si cambia la variable sobre la que se realizó la comparación de patrones.
De nuevo, esta es una característica pensada para programación y procesamiento de texto más avanzados, análoga a características similares en otros lenguajes como \emph{perl}. Si estás empezando, no te preocupes.

View File

@ -478,7 +478,7 @@ if command && [[ condition ]]; then
El \hyperref[sec:Chapter7]{Capítulo 7} contiene un ejemplo de esta combinación.
También puede negar el valor verdadero de una expresión condicional precediéndola de un signo de exclamación (!), de modo que \texttt{! expr} se evalúe como verdadero sólo si \texttt{expr} es falso. Además, puede hacer expresiones lógicas complejas de operadores condicionales agrupándolos con paréntesis. (Resulta que esto también es cierto fuera de la construcción [[...]]). Como veremos en el Capítulo 8, la construcción \emph{(statement list)} ejecuta la lista de sentencias en un subshell, cuyo estado de salida es el de la última sentencia de la lista).
También puede negar el valor verdadero de una expresión condicional precediéndola de un signo de exclamación (!), de modo que \texttt{! expr} se evalúe como verdadero sólo si \texttt{expr} es falso. Además, puede hacer expresiones lógicas complejas de operadores condicionales agrupándolos con paréntesis. (Resulta que esto también es cierto fuera de la construcción [[...]]). Como veremos en el \hyperref[sec:Chapter8]{Capítulo 8}, la construcción \emph{(statement list)} ejecuta la lista de sentencias en un subshell, cuyo estado de salida es el de la última sentencia de la lista).
Así es como usaríamos dos de los operadores de fichero para embellecer (una vez más) nuestra función \emph{pushd}. En lugar de hacer que \emph{cd} determine si el argumento dado es un directorio válido -- es decir, devolviendo con un estado de salida malo si no lo es -- podemos hacer la comprobación nosotros mismos. Aquí está el código:
@ -545,7 +545,7 @@ Llamaremos a este script \emph{fileinfo}. Así es como funciona:
\item{La segunda condicional comprueba si el fichero es un directorio. Si es así, la primera imprime parte de un mensaje; recuerde que la opción \emph{-n} indica a \emph{print} que no imprima una nueva línea al final. La condicional interna comprueba si no tienes permiso de búsqueda en el directorio. Si no tiene permiso de búsqueda, se añade la palabra <<not>> al mensaje parcial. A continuación, el mensaje se completa con <<search>> y una nueva línea. }
\item{La cláusula \texttt{elif} comprueba si el fichero es un fichero normal; en caso afirmativo, imprime un mensaje.}
\item{La cláusula \emph{else} tiene en cuenta los distintos tipos de ficheros especiales de los sistemas Unix recientes, como sockets, dispositivos, ficheros FIFO, etc. Asumimos que el usuario ocasional no está interesado en sus detalles.}
\item{La siguiente condicional comprueba si eres el propietario del fichero (es decir, si su ID de propietario es el mismo que tu ID de usuario efectivo). Si es así, imprime un mensaje diciendo que usted es el propietario. (Los ID reales y efectivos de Usuario y Grupo se explican en el Capítulo 10.) }
\item{La siguiente condicional comprueba si eres el propietario del fichero (es decir, si su ID de propietario es el mismo que tu ID de usuario efectivo). Si es así, imprime un mensaje diciendo que usted es el propietario. (Los ID reales y efectivos de Usuario y Grupo se explican en el \hyperref[sec:Chapter10]{Capítulo 10}.) }
\item{Las dos condiciones siguientes comprueban sus permisos de lectura y escritura sobre el fichero.}
\item{La última condicional comprueba si puedes ejecutar el fichero. Comprueba si tiene permiso de ejecución y si el fichero no es un directorio. (Si el archivo fuera un directorio, el permiso de ejecución significaría realmente el permiso de búsqueda de directorio).}
\end{itemize}

View File

@ -859,8 +859,6 @@ Como se mencionó en la sección anterior, las tareas de programación en shell
Un array asociativo es un array indexado por valores de cadena. Proporciona una asociación entre el índice de cadena y el valor del array en ese índice, lo que hace que ciertos tipos de tareas funcionen de manera mucho más natural. Le indicas al shell que un array es asociativo usando \texttt{typeset -A}:
\newpage
\begin{lstlisting}[language=bash]
typeset -A person
person[firstname]="frank"

View File

@ -372,7 +372,7 @@ if ((es >= 256)); then
fi
\end{lstlisting}
\section{trap}
\section{trap}\label{sec:84}
Hemos estado discutiendo cómo las señales afectan al usuario casual; ahora hablemos un poco sobre cómo los programadores de shell pueden usarlas. No profundizaremos demasiado en esto, porque realmente es el ámbito de los programadores de sistemas.
Mencionamos anteriormente que los programas en general pueden configurarse para <<atrapar>> señales específicas y procesarlas a su manera. El comando integrado \emph{trap} te permite hacer esto desde un script de shell. \emph{trap} es crucial para <<blindar>> programas de shell extensos para que reaccionen adecuadamente a eventos anómalos, al igual que los programas en cualquier lenguaje deberían protegerse contra una entrada no válida. También es importante para ciertas tareas de programación de sistemas, como veremos en el próximo capítulo.

View File

@ -31,7 +31,7 @@ ralph
\caption{Opciones de depuración}
\label{Tab:9-1}
\begin{tabular}{|m{2cm}|m{3cm}|m{10cm}|} \hline
\textbf{Opción \texttt{set -o}} & \textbf{Opción de línea de comandos} & \textbf{Acción} \\ \hline
\textbf{Opción \texttt{set -o}} & \small{\textbf{Opción de línea de comandos}} & \textbf{Acción} \\ \hline
noexec & -n & No ejecute comandos; compruebe sólo errores de sintaxis \\\hline
verbose & -v & Eco de comandos antes de ejecutarlos \\\hline
xtrace & -x & Comandos de eco tras el procesamiento de la línea de comandos \\\hline
@ -131,7 +131,7 @@ Las señales simuladas actúan como señales reales, pero son generadas por el s
\caption{Señales simuladas}
\label{Tab:9-2}
\begin{tabular}{|m{3cm}|m{12cm}|} \hline
\textbf{Señal simulada} & \textbf{Cuando se envía} \\ \hline
\small{\textbf{Señal simulada}} & \textbf{Cuando se envía} \\ \hline
EXIT & El shell sale de una función o script \\\hline
ERR & Un comando devuelve un estado de salida distinto de cero \\\hline
DEBUG & Antes de cada declaración (después en \emph{ksh88}) \\\hline