The major source of working, real-life examples is <filename>/etc/rc.d</filename> in a live system. Its contents are easy and pleasant to read because most rough corners are hidden deep in <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry>. Keep in mind though that the <filename>/etc/rc.d</filename> scripts were not written by angels, so they might suffer from bugs and suboptimal design decisions. Now you can improve them!
La principal fuente de ejemplos prácticos de la vida real es <filename>/etc/rc.d</filename> en un sistema en vivo. Su contenido es fácil y agradable de leer porque la mayoría de las esquinas están ocultas en el fondo. <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry>. Sin embargo, tenga en cuenta que el <filename>/etc/rc.d</filename> scripts no fueron escritas por ángeles, por lo que podrían sufrir errores y decisiones de diseño subóptimas. ¡Ahora puedes mejorarlos!
2 months ago
<anchor xml:id="manpages"/>The manual pages <citerefentry><refentrytitle>rc</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry>, and <citerefentry><refentrytitle>rcorder</refentrytitle><manvolnum>8</manvolnum></citerefentry> document the <filename>rc.d</filename> components in great detail. You cannot fully use the <filename>rc.d</filename> power without studying the manual pages and referring to them while writing your own scripts.
<anchor xml:id="manpages"/>The manual pages <citerefentry><refentrytitle>rc</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry>, and <citerefentry><refentrytitle>rcorder</refentrytitle><manvolnum>8</manvolnum></citerefentry> document the <filename>rc.d</filename> componentes con gran detalle. No puede utilizar completamente el <filename>rc.d</filename>poder sin estudiar las páginas del manual y consultarlas mientras escribe sus propios scripts.
2 months ago
<anchor xml:id="lukem"/><link xlink:href="http://www.mewburn.net/luke/papers/rc.d.pdf">The original article by Luke Mewburn</link> offers a general overview of <filename>rc.d</filename> and detailed rationale for its design decisions. It provides insight on the whole <filename>rc.d</filename> framework and its place in a modern BSD operating system.
<anchor xml:id="lukem"/><link xlink:href="http://www.mewburn.net/luke/papers/rc.d.pdf">El artículo original de Luke Mewburn</link> ofrece una descripción general de <filename>rc.d</filename> y justificación detallada de sus decisiones de diseño. Proporciona información sobre el conjunto <filename>rc.d</filename> framework y su lugar en un sistema operativo BSD moderno.
2 months ago
Further reading
Otras lecturas
2 months ago
Currently <function>run_rc_command</function> may have a bug that prevents it from keeping the original boundaries between arguments. That is, arguments with embedded whitespace may not be processed correctly. The bug stems from <envar>$*</envar> misuse.
Actualmente <function>run_rc_command</function> puede tener un error que le impide mantener los límites originales entre argumentos. Es decir, es posible que los argumentos con espacios en blanco incrustados no se procesen correctamente. El error proviene de <envar>$*</envar> mal uso.
2 months ago
An <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry> programmer ought to understand the subtle difference between <envar>$*</envar> and <envar>$@</envar> as the ways to designate all positional parameters. For its in-depth discussion, refer to a good handbook on <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry> scripting. <emphasis>Do not</emphasis> use the expressions until you fully understand them because their misuse will result in buggy and insecure scripts.
Un <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry> El programador trató de comprender la sutil diferencia entre <envar>$*</envar> y <envar>$@</envar> como las formas de designar todos los parámetros posicionales. Para su discusión en profundidad, consulte un buen manual sobre <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry> scripting. <emphasis>no haga</emphasis> use las expresiones hasta que las entienda completamente porque su mal uso resultará en scripts con errores e inseguros.
2 months ago
If we want just to pass all extra arguments to any method, we can merely substitute <literal>"$@"</literal> for <literal>"$1"</literal> in the last line of our script, where we invoke <function>run_rc_command</function>.
Si solo queremos pasar todos los argumentos adicionales a cualquier método, simplemente podemos sustituir <literal>"$@"</literal> para <literal>"$1"</literal> en la última línea de nuestro script, donde invocamos <function>run_rc_command</function>.
2 months ago
If we want just to pass all extra arguments to any method, we can merely substitute <literal>"$@"</literal> for <literal>"$1"</literal> in the last line of our script, where we invoke <function>run_rc_command</function>.
Si solo queremos pasar todos los argumentos adicionales a cualquier método, simplemente podemos sustituir <literal>"$@"</literal> para <literal>"$1"</literal> en la última línea de nuestro script, donde invocamos <function>run_rc_command</function>.
2 months ago
<prompt>#</prompt> <userinput>/etc/rc.d/dummy kiss</userinput>
A ghost gives you a kiss.
<prompt>#</prompt> <userinput>/etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...</userinput>
A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...
<prompt>#</prompt> <userinput>/etc/rc.d/dummy kiss</userinput>
Un fantasma te da un beso.
<prompt>#</prompt> <userinput>/etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...</userinput>
Un fantasma te da un beso y susurra: Una vez fui Etaoin Shrdlu ...
2 months ago
The same applies to any method our script provides, not only to a standard one. We have added a custom method named <option>kiss</option>, and it can take advantage of the extra arguments not less than <option>start</option> does. E.g.:
Lo mismo se aplica a cualquier método que proporcione nuestro script, no solo a uno estándar. Hemos agregado un método personalizado llamado <option>kiss</option>, y puede aprovechar los argumentos adicionales no menos de <option>start</option> hace Ejemplo.:
2 months ago
<prompt>#</prompt> <userinput>/etc/rc.d/dummy start</userinput>
Nothing started.
<prompt>#</prompt> <userinput>/etc/rc.d/dummy start Hello world!</userinput>
Greeting message: Hello world!
<prompt>#</prompt> <userinput>/etc/rc.d/dummy start</userinput>
No empezó nada.
<prompt>#</prompt> <userinput>/etc/rc.d/dummy start Hello world!</userinput>
Mensaje de bienvenida: ¡Hola mundo!
2 months ago
All arguments you type after <option>start</option> can end up as positional parameters to the respective method. We can use them in any way according to our task, skills, and fancy. In the current example, we just pass all of them to <citerefentry><refentrytitle>echo</refentrytitle><manvolnum>1</manvolnum></citerefentry> as one string in the next line — note <envar>$*</envar> within the double quotes. Here is how the script can be invoked now:
Todos los argumentos que escribe después <option>start</option>pueden terminar como parámetros posicionales para el método respectivo. Podemos usarlos de cualquier manera de acuerdo con nuestra tarea, habilidades y fantasía. En el ejemplo actual, simplemente los pasamos todos a<citerefentry><refentrytitle>echo</refentrytitle><manvolnum>1</manvolnum></citerefentry> como una cadena en la siguiente línea - nota <envar>$*</envar> entre las comillas dobles. Así es como se puede invocar el script ahora:
2 months ago
What essential changes can we notice in the script?
¿Qué cambios esenciales podemos notar en el guiónscript?
2 months ago
What essential changes can we notice in the script?
¿Qué cambios esenciales podemos notar en el guión?
2 months ago
#!/bin/sh

. /etc/rc.subr

name="dummy"
start_cmd="${name}_start"
stop_cmd=":"
kiss_cmd="${name}_kiss"
extra_commands="kiss"

dummy_start()
{
if [ $# -gt 0 ]; then<co xml:id="rcng-args-start"/>
echo "Greeting message: $*"
else
echo "Nothing started."
fi
}

dummy_kiss()
{
echo -n "A ghost gives you a kiss"
if [ $# -gt 0 ]; then<co xml:id="rcng-args-kiss"/>
echo -n " and whispers: $*"
fi
case "$*" in
*[.!?])
echo
;;
*)
echo .
;;
esac
}

load_rc_config $name
run_rc_command "$@"<co xml:id="rcng-args-all"/>
#!/bin/sh

. /etc/rc.subr

name="dummy"
start_cmd="${name}_start"
stop_cmd=":"
kiss_cmd="${name}_kiss"
extra_commands="kiss"

dummy_start()
{
if [ $# -gt 0 ]; then<co xml:id="rcng-args-start"/>
echo "Greeting message: $*"
else
echo "Nothing started."
fi
}

dummy_kiss()
{
echo -n "A ghost gives you a kiss"
if [ $# -gt 0 ]; then<co xml:id="rcng-args-kiss"/>
echo -n " and whispers: $*"
fi
case "$*" in
*[.!?])
echo
;;
*)
echo .
;;
esac
}

load_rc_config $name
run_rc_command "$@"<co xml:id="rcng-args-all"/>
2 months ago
To illustrate this opportunity, let us modify the primitive dummy script so that its messages depend on the additional arguments supplied. Here we go:
Para ilustrar esta oportunidad, modifiquemos el guiónscript ficticio primitivo para que sus mensajes dependan de los argumentos adicionales proporcionados. Aquí vamos:
2 months ago
To illustrate this opportunity, let us modify the primitive dummy script so that its messages depend on the additional arguments supplied. Here we go:
Para ilustrar esta oportunidad, modifiquemos el guión ficticio primitivo para que sus mensajes dependan de los argumentos adicionales proporcionados. Aquí vamos:
2 months ago
So the approach adopted by <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> is as follows: <function>run_rc_command</function> passes on all its arguments but the first one to the respective method verbatim. The first, omitted, argument is the name of the method itself: <option>start</option>, <option>stop</option>, etc. It will be shifted out by <function>run_rc_command</function>, so what is <envar>$2</envar> in the original command line will be presented as <envar>$1</envar> to the method, and so on.
Entonces, el enfoque adoptado por <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> es como sigue: <function>run_rc_command</function> pasa todos sus argumentos, excepto el primero, al método respectivo literalmente. El primer argumento, omitido, es el nombre del método en sí.: <option>start</option>, <option>stop</option>,etc. Será desplazado por <function>run_rc_command</function>, entonces que es <envar>$2</envar> en la línea de comando original se presentará como <envar>$1</envar> al método, y así sucesivamente.
2 months ago
How can <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> gain access to the extra command-line arguments. Should it just grab them directly? Not by any means. Firstly, an <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry> function has no access to the positional parameters of its caller, but <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> is just a sack of such functions. Secondly, the good manner of <filename>rc.d</filename> dictates that it is for the main script to decide which arguments are to be passed to its methods.
Como puedo<citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> obtenga acceso a los argumentos adicionales de la línea de comandos. ¿Debería agarrarlos directamente? De ninguna manera. En primer lugar, un <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry> La función no tiene acceso a los parámetros posicionales de su llamador, pero <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> es solo un saco de tales funciones. En segundo lugar, la buena forma de <filename>rc.d</filename> dicta que corresponde al script principal decidir qué argumentos se deben pasar a sus métodos.
2 months ago
Fortunately, <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> allows for passing any number of arguments to script's methods (within the system limits). Due to that, the changes in the script itself can be minimal.
Por suerte, <citerefentry><refentrytitle>rc.subr</refentrytitle><manvolnum>8</manvolnum></citerefentry> permite pasar cualquier número de argumentos a los métodos del script (dentro de los límites del sistema). Debido a eso, los cambios en el propio script pueden ser mínimos.
2 months ago

Search