Re: modificar un archivo en bash
Hola a todos. Perdonad, creo que no he sido demasiado claro. :-). Se trata de la configuración de postfix y fetchmail, como sabeis hay que configurar varios archivos, y como la configuración, alias, etc. Lo que prependo hacer es un scripts donde pregunte el nombre de dominio, los nombre de usuario, contraseñas... y que el script acceda a los archivos (plantillas previamente preparadas y colocadas en cada ruta) y modifique los valores que tengo por defecto. ejemplo: ---archivo main.cf-- # NOMBRE, DOMINIO(S) y RED(ES) myhostname = var1 mydomain = var2 relay = var3 # DIRECCION QUE APARECE EN EL FROM myorigin = $mydomain . . . # PROPIETARIO DE COLAS Y PROCESOS mail_owner = postfix setgid_group = postdrop # TRATAMIENTO DE ALIAS alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases # IDENTIFICACION DE USUARIOS LOCALES local_recipient_maps = $alias_maps unix:passwd.byname # ENVIO EN PARALELO A UN MISMO DESTINO local_destination_concurrency_limit = 2 default_destination_concurrency_limit = 10 # OTROS PARAMETROS DE CONFIGURACION notify_classes = resource, software, policy transport_maps = hash:/etc/postfix/transport disable_vrfy_command = yes disable_dns_lookups = yes relayhost= [$relay] message_size_limit = 10485760 mailbox_size_limit = 0 maximal_queue_lifetime = 5d #maps_rbl_domains= relays.ordb.org # CONTROL DE CORREO ENTRANTE / SALIENTE mynetworks = variable4 mydestination= $myhostname localhost.$mydomain $mydomain relay_domains= $mydestination #smtpd_client_restrictions = reject_maps_rbl reject_unknown_client #smtpd_helo_required = yes #smtpd_helo_restrictions = reject_invalid_hostname reject_unknown_hostname reject_non_fqdn_hostname smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains header_checks = regexp:/etc/postfix/header_checks body_checks= regexp:/etc/postfix/body_checks content_filter = vscan: #mailbox_command = procmail -a $EXTENSION ---fin archivo Pues eso, el script modificaría los var dependiendo de diversas entradas de por el teclado. El Mar 25 Mar 2003 01:19, Cesar Rincon escribió: On Mon, 2003-03-24 at 13:41, Fernando Blat Peris wrote: A alguien se le ocurre algo más elegante que mi chapucilla?? Probablemente no he entendido lo que Rafael quiere, pero me suena demasiado simple... En fin. Mi solución no es más elegante, pero sí más compacta (y quizá más entendible y fácil de mantener): Asumiendo que el archivo contiene una línea que reza literalmente Nombre: var1 cuya dirección ip es var2: --- #!/bin/bash if [ -z $1 -o -z $2 ]; then echo Uso: $0 nombre ip 2 exit 1 fi sed -e s|^Nombre: var1 cuya dirección ip es var2|\ Nombre: $1 cuya dirección ip es $2| exit 0 --- Y lo usarías como un filtro: cat archivo.in | script NOMBRE 123.123.123.123 archivo.out O, si te interesa reemplazar el archivo, algo como script NOMBRE 123.123.123.123 archivo archivo.$$ \ mv archivo.$$ archivo Decía que demasiado fácil porque ésto es realmente un one liner: no es necesario hacer el script, basta con teclear la invocación a sed. Pero bueno, seguramente no he entendido... -CR
Re: modificar un archivo en bash
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 hola On Tuesday 25 March 2003 09:49, Rafael F. Rodríguez wrote: Hola a todos. Perdonad, creo que no he sido demasiado claro. :-). Se trata de la configuración de postfix y fetchmail, como sabeis hay que configurar varios archivos, y como la configuración, alias, etc. Lo que prependo hacer es un scripts donde pregunte el nombre de dominio, los nombre de usuario, contraseñas... y que el script acceda a los archivos (plantillas previamente preparadas y colocadas en cada ruta) y modifique los valores que tengo por defecto. ejemplo: De la forma mas simple posible esto sería: Simplemente recordarte que las comillas delimitan variables que contienen espacios. un saludo Victor ---archivo main.cf-- #!/bin/bash #uso ./miscript hostname domain relay # NOMBRE, DOMINIO(S) y RED(ES) myhostname = $1 mydomain = $2 relay = $3 echo # DIRECCION QUE APARECE EN EL FROM myorigin = $mydomain . . . # PROPIETARIO DE COLAS Y PROCESOS mail_owner = postfix setgid_group = postdrop # TRATAMIENTO DE ALIAS alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases # IDENTIFICACION DE USUARIOS LOCALES local_recipient_maps = $alias_maps unix:passwd.byname # ENVIO EN PARALELO A UN MISMO DESTINO local_destination_concurrency_limit = 2 default_destination_concurrency_limit = 10 # OTROS PARAMETROS DE CONFIGURACION notify_classes = resource, software, policy transport_maps = hash:/etc/postfix/transport disable_vrfy_command = yes disable_dns_lookups = yes relayhost= [$relay] message_size_limit = 10485760 mailbox_size_limit = 0 maximal_queue_lifetime = 5d #maps_rbl_domains= relays.ordb.org # CONTROL DE CORREO ENTRANTE / SALIENTE mynetworks = variable4 mydestination= $myhostname localhost.$mydomain $mydomain relay_domains= $mydestination #smtpd_client_restrictions = reject_maps_rbl reject_unknown_client #smtpd_helo_required = yes #smtpd_helo_restrictions = reject_invalid_hostname reject_unknown_hostname reject_non_fqdn_hostname smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains header_checks = regexp:/etc/postfix/header_checks body_checks= regexp:/etc/postfix/body_checks content_filter = vscan: #mailbox_command = procmail -a $EXTENSION archivo_de_salida ---fin archivo Pues eso, el script modificaría los var dependiendo de diversas entradas de por el teclado. El Mar 25 Mar 2003 01:19, Cesar Rincon escribió: On Mon, 2003-03-24 at 13:41, Fernando Blat Peris wrote: A alguien se le ocurre algo más elegante que mi chapucilla?? Probablemente no he entendido lo que Rafael quiere, pero me suena demasiado simple... En fin. Mi solución no es más elegante, pero sí más compacta (y quizá más entendible y fácil de mantener): Asumiendo que el archivo contiene una línea que reza literalmente Nombre: var1 cuya dirección ip es var2: --- #!/bin/bash if [ -z $1 -o -z $2 ]; then echo Uso: $0 nombre ip 2 exit 1 fi sed -e s|^Nombre: var1 cuya dirección ip es var2|\ Nombre: $1 cuya dirección ip es $2| exit 0 --- Y lo usarías como un filtro: cat archivo.in | script NOMBRE 123.123.123.123 archivo.out O, si te interesa reemplazar el archivo, algo como script NOMBRE 123.123.123.123 archivo archivo.$$ \ mv archivo.$$ archivo Decía que demasiado fácil porque ésto es realmente un one liner: no es necesario hacer el script, basta con teclear la invocación a sed. Pero bueno, seguramente no he entendido... -CR - -- - -- Marzo Uno de los peores meses para andar metiendo al mundo en guerras absurdas El resto de meses del mismo tipo son: Enero, Febrero, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre y Diciembre. -BEGIN PGP SIGNATURE- Version: GnuPG v1.0.6 (GNU/Linux) Comment: For info see http://www.gnupg.org iD8DBQE+gCo0EzqHF8R72ekRAjqnAKCVWzSEOTGQsaAbMTB9LM3LCuDF0wCeIXUC 00phKznYtW9KsC3yaIlvblE= =N+Hv -END PGP SIGNATURE-
Re: modificar un archivo en bash
On Tue, 2003-03-25 at 02:49, Rafael F. Rodríguez wrote: Lo que prependo hacer es un scripts donde pregunte el nombre de dominio, los nombre de usuario, contraseñas... y que el script acceda a los archivos (plantillas previamente preparadas y colocadas en cada ruta) y modifique los valores que tengo por defecto. Oh, ya veo. Pues mira, si hay libertad de decidir el formato de las plantillas (quiero decir, si no hay que ajustarse a un formato de plantilla en particular), yo haría scripts-plantilla. Por ejemplo: - #!/bin/sh # genmain.sh: Plantilla para generar el main.cf de Postfix # Uso: genmain.sh HOSTNAME DOMAIN RELAY NETWORKS cat END # Este es un archivo de configuracion autogenerado. # No tocar, a menos que sepas lo que haces. myhostname = $1 mydomain = $2 relay = $3 # DIRECCION QUE APARECE EN EL FROM myorigin = \$mydomain ... mynetworks = $4 ... END exit 0 - Nota el escape antes de $mydomain. Debería ser obvio porqué es necesario. El script lo puedes probar en la consola, tecleando a mano los valores. Cuando funcione correctamente, simplemente invocas a la plantilla desde tu script principal: - #!/bin/sh TARGET=/tmp/main.cf read -p Hostname: HOST read -p Domain: DOMAIN read -p Relay: RELAY read -p Networks: NETWORKS genmain.sh $HOST $DOMAIN $RELAY $NETWORKS $TARGET exit 0 - Las comillas son necesarias por si te teclean espacios en alguna de las variables. ¿Se parece más a lo que necesitas, ésto? -CR
Re: modificar un archivo en bash
On Mon, 24 Mar 2003, Rafael F. [iso-8859-15] Rodríguez wrote: Hola a todos. Holas Tengo un problema ya dos semanas, y no consigo encontrar la respuesta. Me gustaría modificar el contenido de un archivo en la línea de comandos. ejem. cut(1), awk(1), sed(1), bash(1). archivo.txt Nombre: var1 cuya dirección ip es var2 Eso solo va en el archivo? Si es tan poco, puedes reescribirlo todas las veces completo, no hay para que modificarlo. Pues lo que quiero es modificar var1 y var2 desde la línea de comando por otros valores. Reescribelo todad las veces mejor. Muchas gracias. De nada Saludos! -- Mauricio Alejandro Araya Lopez* User #249395 counter.li.org Est.Ingenieria Civil Informatica, * Fono: +56 32 671387 Universidad Tecnica Federico Santa María * Cel : 09 3469128 Viña del Mar, Chile. * http://www.inf.utfs.cl/~maray
Re: modificar un archivo en bash
Hola: ¿De dónde o cómo obtienes var1 y var2? -- Atentamente, yo Matías No a la invación en Irak cita quien=Rafael F. Rodríguez Hola amigo. No hombre el archivo es muucho mas largo, pero he considerado oportuno no ponerlo directamente, solo era un ejemplo. Necesitaria un ejemplo concreto, por ejemplo: loquesea archivo.txt var1 esto hay que poner loquesea archivo.txt var2 y aquí la otra variable Gracias. El Lun 24 Mar 2003 13:03, Mauricio Alejandro Araya Lopez escribió: On Mon, 24 Mar 2003, Rafael F. [iso-8859-15] Rodríguez wrote: Hola a todos. Holas Tengo un problema ya dos semanas, y no consigo encontrar la respuesta. Me gustaría modificar el contenido de un archivo en la línea de comandos. ejem. cut(1), awk(1), sed(1), bash(1). archivo.txt Nombre: var1 cuya dirección ip es var2 Eso solo va en el archivo? Si es tan poco, puedes reescribirlo todas las veces completo, no hay para que modificarlo. Pues lo que quiero es modificar var1 y var2 desde la línea de comando por otros valores. Reescribelo todad las veces mejor. Muchas gracias. De nada Saludos! -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]
Re: modificar un archivo en bash
Si todo es como he entendido este script te puede funcionar: #!/bin/bash # $0: ejecutable # $1: fichero # $2: var1 o var2 # $3: cadena a añadir if [ $# -ne 3 ] then echo Error en el numero de argumentos echo Uso: $0 fichero var1|var2 cadena exit -1 fi if [ $2 == var1 ] then cat $1 | awk -v texto=$3 '{print $1 texto $3 $4 $5 $6 $7 }' $1 exit 0 fi if [ $2 == var2 ] then cat $1 | awk -v texto=$3 '{print $1 $2 $3 $4 $5 $6 texto }' $1 exit 0 fi Pero ten en cuenta que está muy limitado para la estructura de fichero que has dado, es decir, si la modificas no te servirá :S A alguien se le ocurre algo más elegante que mi chapucilla?? -- Fernando Blat Peris http://ttt.inf.upv.es/~ferblape Polinux http://polinux.upv.es UPV - Valencia
Re: modificar un archivo en bash
On Mon, 2003-03-24 at 13:41, Fernando Blat Peris wrote: A alguien se le ocurre algo más elegante que mi chapucilla?? Probablemente no he entendido lo que Rafael quiere, pero me suena demasiado simple... En fin. Mi solución no es más elegante, pero sí más compacta (y quizá más entendible y fácil de mantener): Asumiendo que el archivo contiene una línea que reza literalmente Nombre: var1 cuya dirección ip es var2: --- #!/bin/bash if [ -z $1 -o -z $2 ]; then echo Uso: $0 nombre ip 2 exit 1 fi sed -e s|^Nombre: var1 cuya dirección ip es var2|\ Nombre: $1 cuya dirección ip es $2| exit 0 --- Y lo usarías como un filtro: cat archivo.in | script NOMBRE 123.123.123.123 archivo.out O, si te interesa reemplazar el archivo, algo como script NOMBRE 123.123.123.123 archivo archivo.$$ \ mv archivo.$$ archivo Decía que demasiado fácil porque ésto es realmente un one liner: no es necesario hacer el script, basta con teclear la invocación a sed. Pero bueno, seguramente no he entendido... -CR