580 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			580 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| ##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | |
| ## Fonctions "récupérées" de utools, pas encore classées ou réécrites, mais
 | |
| ## gardées pour compatibilité.
 | |
| ##@cooked nocomments
 | |
| ##@require base
 | |
| uprovide legacy
 | |
| urequire base
 | |
| 
 | |
| function file_get_vars() {
 | |
|     # lire les variables dans un fichier
 | |
|     local OENC="$UTF8"
 | |
|     local done_ prefix_ whole_file_ file_ vars_ var_ script_
 | |
| 
 | |
|     # traiter les arguments
 | |
|     done_=
 | |
|     while [ -z "$done_" ]; do
 | |
|         case "$1" in
 | |
|         --prefix|-p)
 | |
|             # prefixe pour la variable
 | |
|             prefix_="$2"
 | |
|             shift; shift
 | |
|             ;;
 | |
|         --whole-file|-w)
 | |
|             # lire les variables dans le fichier en entier, et pas seulement
 | |
|             # dans l'en-tête.
 | |
|             whole_file_=1
 | |
|             shift
 | |
|             ;;
 | |
|         *)
 | |
|             done_=1
 | |
|             ;;
 | |
|         esac
 | |
|     done
 | |
| 
 | |
|     # obtenir le nom du fichier
 | |
|     file_="$1"; shift
 | |
|     if [ ! -f "$file_" ]; then
 | |
|         # fichier inexistant
 | |
|         ewarn "Fichier inexistant: $file_"
 | |
|         return 1
 | |
|     fi
 | |
| 
 | |
|     # initialiser les valeurs par défaut
 | |
|     vars_=
 | |
|     while [ -n "$1" ]; do
 | |
|         var_="$1"; shift
 | |
|         vars_="${vars_:+$vars_ }$var_"
 | |
|         set_var "$var_" "$1"; shift
 | |
|     done
 | |
| 
 | |
|     # puis parcourir le fichier pour initialiser la valeur définitive des
 | |
|     # variables
 | |
|     if [ -z "$whole_file_" ]; then
 | |
|         script_="/^ *$/ { exit }
 | |
| "
 | |
|     fi
 | |
| 
 | |
|     for var_ in $vars_; do
 | |
|         script_="$script_
 | |
| "'$0 ~ "^ *#* *" prefix "'"$var_"'=" {
 | |
|     # enlever les caractères inutiles
 | |
|     sub(" *#* *" prefix "'"$var_"'=", "")
 | |
|     # enlever éventuellement les quotes autour de la valeur
 | |
|     if ($0 ~ /^".*" *$/) {
 | |
|         $0 = substr($0, 2) # premier quote
 | |
|         match($0, /" *$/)
 | |
|         $0 = substr($0, 1, RSTART - 1) # dernier quote
 | |
|     }
 | |
|     # remplacer dans les valeurs les occurences de quotes
 | |
|     gsub("\"", "\\\"")
 | |
|     # afficher la ligne à évaluer
 | |
|     print "'"$var_"'=\"" $0 "\""
 | |
| }
 | |
| '
 | |
|     done
 | |
| 
 | |
|     eval "$(awkrun prefix="$prefix_" "$script_" <"$file_")"
 | |
| }
 | |
| 
 | |
| function file_set_vars() {
 | |
|     # écrire les variables dans un fichier. Le fichier *doit exister*
 | |
|     local OENC="$UTF8"
 | |
|     local done_ quote_ comment_ prefix_ whole_file_ file_ var_ script_
 | |
| 
 | |
|     # traiter les arguments
 | |
|     done_=
 | |
|     while [ -z "$done_" ]; do
 | |
|         case "$1" in
 | |
|         --quote-always|-q)
 | |
|             # toujours mettre les valeurs entre quotes
 | |
|             quote_=1
 | |
|             shift
 | |
|             ;;
 | |
|         --comment-prefix|-c)
 | |
|             # commentaire à préfixer
 | |
|             comment_="$2"
 | |
|             shift; shift
 | |
|             ;;
 | |
|         --prefix|-p)
 | |
|             # prefixe pour la variable
 | |
|             prefix_="$2"
 | |
|             shift; shift
 | |
|             ;;
 | |
|         --whole-file|-w)
 | |
|             # écrire les variables dans le fichier en entier, et pas seulement
 | |
|             # dans l'en-tête.
 | |
|             whole_file_=1
 | |
|             shift
 | |
|             ;;
 | |
|         *)
 | |
|             done_=1
 | |
|             ;;
 | |
|         esac
 | |
|     done
 | |
| 
 | |
|     # obtenir le nom du fichier
 | |
|     file_="$1"; shift
 | |
|     if [ ! -f "$file_" ]; then
 | |
|         # fichier inexistant
 | |
|         ewarn "Fichier inexistant: $file_"
 | |
|         return 1
 | |
|     fi
 | |
| 
 | |
|     # puis parcourir le fichier pour mettre à jour les valeurs
 | |
|     script_='BEGIN {
 | |
|     # faut-il mettre à jour les variables?
 | |
|     update_vars = 1'
 | |
|     for var_ in "$@"; do
 | |
|         script_="$script_
 | |
|     ${var_}_done = 0"
 | |
|     done
 | |
|     script_="$script_
 | |
| }"
 | |
| 
 | |
|     script_="$script_"'
 | |
| function quote_value_maybe(value) {
 | |
|     if (quote_always || index(value, " ") != 0) {
 | |
|         return "\"" value "\""
 | |
|     } else {
 | |
|         return value
 | |
|     }
 | |
| }
 | |
| 
 | |
| function write_all_remaining_vars() {'
 | |
|     for var_ in "$@"; do
 | |
|         value="${!var_}"
 | |
|         script_="$script_"'
 | |
|     if (! '"$var_"'_done) {
 | |
|         print comment prefix "'"$var_"'=" quote_value_maybe("'"${value//\"/\\\"}"'")
 | |
|         '"$var_"'_done = 1
 | |
|     }'
 | |
|     done
 | |
|     script_="$script_
 | |
| }"
 | |
| 
 | |
|     if [ -z "$whole_file_" ]; then
 | |
|         script_="$script_"'
 | |
| /^[ \t]*$/ {
 | |
|     write_all_remaining_vars()
 | |
|     update_vars = 0
 | |
| }'
 | |
|     fi
 | |
| 
 | |
|     script_="$script_"'
 | |
| update_vars && comment == "" && $0 ~ "^ *#* *.*=.*$" {
 | |
|     #comment = gensub("^( *#* *).*=.*$", "\\1", 1)
 | |
|     comment = ""
 | |
|     if (match($0, /^ *#* */) != 0) {
 | |
|         comment = substr($0, RSTART, RLENGTH)
 | |
|     }
 | |
| }'
 | |
| 
 | |
|     for var_ in "$@"; do
 | |
|         value="${!var_}"
 | |
|         script_="$script_"'
 | |
| update_vars && ! '"$var_"'_done && $0 ~ "^ *#* *" prefix "'"$var_"'=" {
 | |
|     #$0 = gensub("^( *#* *" prefix "'"$var_"'=).*$", "\\1", 1)
 | |
|     match($0, "^ *#* *" prefix "'"$var_"'=")
 | |
|     $0 = substr($0, RSTART, RLENGTH)
 | |
|     $0 = $0 quote_value_maybe("'"${value//\"/\\\"}"'")
 | |
|     print
 | |
|     '"$var_"'_done = 1
 | |
|     next
 | |
| }'
 | |
|     done
 | |
| 
 | |
|     script_="$script_"'
 | |
| {
 | |
|     print
 | |
| }
 | |
| END {
 | |
|     if (update_vars) {
 | |
|         write_all_remaining_vars()
 | |
|     }
 | |
| }'
 | |
| 
 | |
|     doinplace "$file_" awkrun quote_always="$quote_" comment="$comment_" prefix="$prefix_" "$script_"
 | |
| }
 | |
| 
 | |
| function file_get_properties() {
 | |
|     # lire les propriétés d'un fichier de propriété java ou xml
 | |
|     if endswith "$1" .xml; then
 | |
|         file_get_xml_properties "$@"
 | |
|     else
 | |
|         file_get_java_properties "$@"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function file_set_properties() {
 | |
|     # écrire les propriétés d'un fichier de propriété java ou xml
 | |
|     local done_ create_
 | |
|     while [ -z "$done_" ]; do
 | |
|         case "$1" in
 | |
|         --create|-c)
 | |
|             create_=1
 | |
|             shift
 | |
|             ;;
 | |
|         *)
 | |
|             done_=1
 | |
|             ;;
 | |
|         esac
 | |
|     done
 | |
|     if endswith "$1" .xml; then
 | |
|         file_set_xml_properties ${create_:+-c} "$@"
 | |
|     else
 | |
|         file_set_java_properties ${create_:+-c} "$@"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| 
 | |
| function file_get_java_properties() {
 | |
|     # lire les propriétés d'un fichier de propriétés java. note: les noms de
 | |
|     # propriété java peuvent contenir le caractère "." mais pas les noms de
 | |
|     # variable bash. La conversion est faite automatiquement. Par exemple::
 | |
|     #    file_get_properties build.properties path.to.package "default value"
 | |
|     # charge la valeur de la propriété dans la variable path_to_package
 | |
| 
 | |
|     # $1=nom du fichier de propriété
 | |
|     # $2..n=propriétés qu'il faut lire et valeurs par défaut de ces propriétés
 | |
|     #   $__2*i  __=nom de la propriété
 | |
|     #   $__2*i+1__=valeur par défaut de la propriété si la valeur n'existe pas
 | |
|     #              dans le fichier
 | |
|     local OENC="$UTF8"
 | |
|     local file_="$1"; shift
 | |
|     if [ ! -f "$file_" ]; then
 | |
|         # fichier inexistant
 | |
|         ewarn "Fichier de propriété inexistant: $file_"
 | |
|         return 1
 | |
|     fi
 | |
| 
 | |
|     local var_ sh_var_ awk_var_
 | |
|     local script
 | |
|     while [ -n "$1" ]; do
 | |
|         # pour chacune des variables...
 | |
|         var_="$1"; shift
 | |
|         sh_var_="${var_//./_}"    # nom de la variable shell traduite ("." --> "_")
 | |
|         sh_var_="${sh_var_//-/_}" #                                   ("-" --> "_")
 | |
|         awkre_var_="${var_//./\\.}" # nom de la variable pour une expression régulière awk
 | |
| 
 | |
|         # initialiser la valeur par défaut
 | |
|         set_var "$sh_var_" "$1"; shift
 | |
| 
 | |
|         # et créer le script qui affichera sa valeur
 | |
|         script="$script"'
 | |
| $0 ~ "^[ \t]*'"$(quote_awk "$awkre_var_")"'=" {
 | |
|     # enlever les caractères de début
 | |
|     sub("^[ \t]*'"$(quote_awk "$awkre_var_")"'=", "")
 | |
|     value = $0
 | |
|     # éventuellement ajouter les lignes de continuation
 | |
|     while (substr(value, length(value), 1) == "\\") {
 | |
|         getline
 | |
|         sub("^[ \t]*", "")
 | |
|         value = substr(value, 1, length(value) - 1) $0
 | |
|     }
 | |
|     gsub("\"", "\\\"", value)
 | |
|     print "'"$sh_var_"'=\"" value "\""
 | |
| }
 | |
| '
 | |
|     done
 | |
| 
 | |
|     eval "$(awk "$script" <"$file_")"
 | |
| }
 | |
| 
 | |
| function file_set_java_properties() {
 | |
|     # écrire des propriétés dans un fichier de propriétés java.
 | |
| 
 | |
|     # $1=nom du fichier de propriété
 | |
|     # $2..n=propriétés qu'il faut écrire et valeurs de ces propriétés
 | |
|     #   $__2*i  __=nom de la propriété
 | |
|     #   $__2*i+1__=valeur de la propriété
 | |
|     # traiter les arguments
 | |
|     local OENC="$UTF8"
 | |
|     local done_ create_
 | |
|     while [ -z "$done_" ]; do
 | |
|         case "$1" in
 | |
|         --create|-c)
 | |
|             # créer le fichier s'il n'existe pas
 | |
|             create_=1
 | |
|             shift
 | |
|             ;;
 | |
|         *)
 | |
|             done_=1
 | |
|             ;;
 | |
|         esac
 | |
|     done
 | |
| 
 | |
|     local file_="$1"; shift
 | |
|     if [ ! -f "$file_" ]; then
 | |
|         if [ -n "$create_" ]; then
 | |
|             touch "$file_"
 | |
|         else
 | |
|             # fichier inexistant
 | |
|             ewarn "Fichier de propriété inexistant: $file_"
 | |
|             return 1
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
|     # récupérer les noms des propriétés et leur valeur
 | |
|     local var_ arg_ sh_var_ awkre_var_ value_
 | |
|     local -a vars_ values_
 | |
|     value_=vars_
 | |
|     for arg_ in "$@"; do
 | |
|         array_add "$value_" "$arg_"
 | |
|         if [ "$value_" == "vars_" ]; then
 | |
|             value_=values_
 | |
|         else
 | |
|             value_=vars_
 | |
|         fi
 | |
|     done
 | |
| 
 | |
|     # créer le script qui va parcourir le fichier pour mettre à jour les valeurs
 | |
|     script_="BEGIN {"
 | |
|     for var_ in "${vars_[@]}"; do
 | |
|         sh_var_="${var_//./_}"    # nom de la variable shell traduite ("." --> "_")
 | |
|         sh_var_="${sh_var_//-/_}" #                                   ("-" --> "_")
 | |
|         script_="$script_
 | |
|     ${sh_var_}_done = 0"
 | |
|     done
 | |
|     script_="$script_"'
 | |
| }
 | |
| function write_all_remaining_vars() {'
 | |
|     local i=0
 | |
|     while [ $i -lt ${#vars_[*]} ]; do
 | |
|         var_="${vars_[$i]}"
 | |
|         sh_var_="${var_//./_}"    # nom de la variable shell traduite ("." --> "_")
 | |
|         sh_var_="${sh_var_//-/_}" #                                   ("-" --> "_")
 | |
|         awkre_var_="${var_//./\\.}" # nom de la variable pour une expression régulière awk
 | |
|         value_="${values_[$i]}"
 | |
| 
 | |
|         script_="$script_"'
 | |
|     if (! '"$sh_var_"'_done) {
 | |
|         print "'"$var_"'=" "'"${value_//\"/\\\"}"'"
 | |
|         '"$sh_var_"'_done = 1
 | |
|     }'
 | |
|         i=$((i + 1))
 | |
|     done
 | |
|     script_="$script_
 | |
| }"
 | |
| 
 | |
|     local i=0
 | |
|     while [ $i -lt ${#vars_[*]} ]; do
 | |
|         var_="${vars_[$i]}"
 | |
|         sh_var_="${var_//./_}"    # nom de la variable shell traduite ("." --> "_")
 | |
|         sh_var_="${sh_var_//-/_}" #                                   ("-" --> "_")
 | |
|         awkre_var_="${var_//./\\.}" # nom de la variable pour une expression régulière awk
 | |
|         value_="${values_[$i]}"
 | |
|         script_="$script_"'
 | |
| ! '"$sh_var_"'_done && $0 ~ "^[ \t]*'"$awkre_var_"'=" {
 | |
|     #name = gensub("^([ \t]*'"$awkre_var_"'=).*$", "\\1", 1)
 | |
|     match($0, "^[ \t]*'"$awkre_var_"'=")
 | |
|     name = substr($0, RSTART, RLENGTH)
 | |
|     value = substr($0, length(name) + 1)
 | |
| 
 | |
|     while (substr(value, length(value), 1) == "\\") {
 | |
|         getline
 | |
|         value = value $0
 | |
|     }
 | |
|     line = name "'"${value_//\"/\\\"}"'"
 | |
|     prefix = ""
 | |
|     max_len = 75
 | |
|     if (length(line) > max_len) {
 | |
|         do {
 | |
|             print prefix substr(line, 1, max_len) "\\"
 | |
|             line = substr(line, max_len + 1)
 | |
|             prefix = "    "
 | |
|             max_len = 71
 | |
|         } while (length(line) > max_len)
 | |
|     }
 | |
|     print prefix line
 | |
|     '"$sh_var_"'_done = 1
 | |
|     next
 | |
| }'
 | |
|         i=$((i + 1))
 | |
|     done
 | |
| 
 | |
|     script_="$script_
 | |
| {
 | |
|     print
 | |
| }
 | |
| END {
 | |
|     write_all_remaining_vars()
 | |
| }"
 | |
| 
 | |
|     doinplace "$file_" awk "$script_"
 | |
| }
 | |
| 
 | |
| function file_get_xml_properties() {
 | |
|     # lire les propriétés d'un fichier de propriétés xml. Limitation: les
 | |
|     # propriétés ne doivent pas être continuées sur plusieurs lignes. Les
 | |
|     # propriétés doivent être écrites sous la forme::
 | |
|     #    <propname>propvalue</propname>
 | |
| 
 | |
|     # note: les noms de propriété java peuvent contenir le caractère "." mais
 | |
|     # pas les noms de variable bash. La conversion est faite
 | |
|     # automatiquement. Par exemple::
 | |
|     #    file_get_properties build.properties path.to.package "default value"
 | |
|     # charge la valeur de la propriété dans la variable path_to_package
 | |
| 
 | |
|     # $1=nom du fichier de propriété
 | |
|     # $2..n=propriétés qu'il faut lire et valeurs par défaut de ces propriétés
 | |
|     #   $__2*i  __=nom de la propriété
 | |
|     #   $__2*i+1__=valeur par défaut de la propriété si la valeur n'existe pas
 | |
|     #              dans le fichier
 | |
|     local OENC="$UTF8"
 | |
|     local file_="$1"; shift
 | |
|     if [ ! -f "$file_" ]; then
 | |
|         # fichier inexistant
 | |
|         ewarn "Fichier de propriété inexistant: $file_"
 | |
|         return 1
 | |
|     fi
 | |
| 
 | |
|     local var_ sh_var_ awk_var_
 | |
|     local script
 | |
|     while [ -n "$1" ]; do
 | |
|         # pour chacune des variables...
 | |
|         var_="$1"; shift
 | |
|         sh_var_="${var_//./_}"    # nom de la variable shell traduite ("." --> "_")
 | |
|         sh_var_="${sh_var_//-/_}" #                                   ("-" --> "_")
 | |
|         awkre_var_="${var_//./\\.}" # nom de la variable pour une expression régulière awk
 | |
| 
 | |
|         # initialiser la valeur par défaut
 | |
|         set_var "$sh_var_" "$1"; shift
 | |
| 
 | |
|         # et créer le script qui affichera sa valeur
 | |
|         script="$script"'
 | |
| $0 ~ /^[ \t]*<'"$awkre_var_"'>.*<\/'"$awkre_var_"'>/ {
 | |
|     sub(/^[ \t]*<'"$awkre_var_"'>/, "")
 | |
|     sub(/<\/'"$awkre_var_"'>.*$/, "")
 | |
|     gsub("\"", "\\\"", $0)
 | |
|     print "'"$sh_var_"'=\"" $0 "\""
 | |
| }
 | |
| '
 | |
|     done
 | |
| 
 | |
|     eval "$(awk "$script" <"$file_")"
 | |
| }
 | |
| 
 | |
| function file_set_xml_properties() {
 | |
|     # écrire des propriétés dans un fichier de propriétés java.
 | |
| 
 | |
|     # $1=nom du fichier de propriété
 | |
|     # $2..n=propriétés qu'il faut écrire et valeurs de ces propriétés
 | |
|     #   $__2*i  __=nom de la propriété
 | |
|     #   $__2*i+1__=valeur de la propriété
 | |
|     # traiter les arguments
 | |
|     local OENC="$UTF8"
 | |
|     local done_ create_
 | |
|     while [ -z "$done_" ]; do
 | |
|         case "$1" in
 | |
|         --create|-c)
 | |
|             # créer le fichier s'il n'existe pas
 | |
|             create_=1
 | |
|             shift
 | |
|             ;;
 | |
|         *)
 | |
|             done_=1
 | |
|             ;;
 | |
|         esac
 | |
|     done
 | |
| 
 | |
|     local file_="$1"; shift
 | |
|     if [ ! -f "$file_" ]; then
 | |
|         if [ -n "$create_" ]; then
 | |
|             touch "$file_"
 | |
|         else
 | |
|             # fichier inexistant
 | |
|             ewarn "Fichier de propriété inexistant: $file_"
 | |
|             return 1
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
|     # récupérer les noms des propriétés et leur valeur
 | |
|     local var_ arg_ sh_var_ awkre_var_ value_
 | |
|     local -a vars_ values_
 | |
|     value_=vars_
 | |
|     for arg_ in "$@"; do
 | |
|         array_add "$value_" "$arg_"
 | |
|         if [ "$value_" == "vars_" ]; then
 | |
|             value_=values_
 | |
|         else
 | |
|             value_=vars_
 | |
|         fi
 | |
|     done
 | |
| 
 | |
|     # créer le script qui va parcourir le fichier pour mettre à jour les valeurs
 | |
|     script_='BEGIN {
 | |
|     rootElement = ""'
 | |
|     for var_ in "${vars_[@]}"; do
 | |
|         sh_var_="${var_//./_}"    # nom de la variable shell traduite ("." --> "_")
 | |
|         sh_var_="${sh_var_//-/_}" #                                   ("-" --> "_")
 | |
|         script_="$script_
 | |
|     ${sh_var_}_done = 0"
 | |
|     done
 | |
|     script_="$script_"'
 | |
| }
 | |
| function write_all_remaining_vars() {'
 | |
|     local i=0
 | |
|     while [ $i -lt ${#vars_[*]} ]; do
 | |
|         var_="${vars_[$i]}"
 | |
|         sh_var_="${var_//./_}"    # nom de la variable shell traduite ("." --> "_")
 | |
|         sh_var_="${sh_var_//-/_}" #                                   ("-" --> "_")
 | |
|         awkre_var_="${var_//./\\.}" # nom de la variable pour une expression régulière awk
 | |
|         value_="${values_[$i]}"
 | |
| 
 | |
|         script_="$script_"'
 | |
|     if (! '"$sh_var_"'_done) {
 | |
|         print "<'"$var_"'>'"${value_//\"/\\\"}"'</'"$var_"'>"
 | |
|         '"$sh_var_"'_done = 1
 | |
|     }'
 | |
|         i=$((i + 1))
 | |
|     done
 | |
|     script_="$script_
 | |
| }"'
 | |
| rootElement == "" {
 | |
|     match($0, /<.*>/)
 | |
|     element = substr($0, RSTART + 1, RLENGTH - 2)
 | |
|     firstChar = substr(element, 1, 1)
 | |
|     if (firstChar != "?" && firstChar != "!") {
 | |
|         rootElement = element
 | |
|     }
 | |
| }'
 | |
| 
 | |
|     local i=0
 | |
|     while [ $i -lt ${#vars_[*]} ]; do
 | |
|         var_="${vars_[$i]}"
 | |
|         sh_var_="${var_//./_}"    # nom de la variable shell traduite ("." --> "_")
 | |
|         sh_var_="${sh_var_//-/_}" #                                   ("-" --> "_")
 | |
|         awkre_var_="${var_//./\\.}" # nom de la variable pour une expression régulière awk
 | |
|         value_="${values_[$i]}"
 | |
|         script_="$script_"'
 | |
| rootElement != "" && ! '"$sh_var_"'_done && $0 ~ /^[ \t]*<'"$awkre_var_"'>.*<\/'"$awkre_var_"'>/ {
 | |
|     match($0, /^[ \t]*<'"$awkre_var_"'>/)
 | |
|     first = substr($0, RSTART, RLENGTH)
 | |
|     value = substr($0, length(first) + 1)
 | |
|     match(value, /<\/'"$awkre_var_"'>.*$/)
 | |
|     last = substr(value, RSTART, RLENGTH)
 | |
|     value = substr(value, 1, RSTART)
 | |
| 
 | |
|     print first "'"${value_//\"/\\\"}"'" last
 | |
|     '"$sh_var_"'_done = 1
 | |
|     next
 | |
| }'
 | |
|         i=$((i + 1))
 | |
|     done
 | |
| 
 | |
|     script_="$script_"'
 | |
| rootElement != "" && $0 ~ "</" rootElement ">" {
 | |
|     rootElement = ""
 | |
|     write_all_remaining_vars()
 | |
| }
 | |
| {
 | |
|     print
 | |
| }
 | |
| END {
 | |
|     write_all_remaining_vars()
 | |
| }'
 | |
| 
 | |
|     doinplace "$file_" awk "$script_"
 | |
| }
 |