archivo de especificaciones rpm con el problema 'cat'


0

Estoy escribiendo un archivo de especificaciones en el que quiero colocar el script para ejecutar el proceso desde el directorio init.d. Aquí es parte del archivo SPEC:

%prep   

%{__cat} <<EOF  > myapp.run


prog="IMG APP BACKEND"
exec=%{APP_prefix}/bin/myapp.%{_APP}
config=%{APP_prefix}/etc/myapp%{_APP}.xml                                  

. /etc/rc.d/init.d/functions                                                  

start() {
        if [ $UID -ne 0 || $UID -ne 80 ]; then
                echo "User has insufficient privilege."                       
                exit 4                                                        
        fi
        [ -x $exec ] || exit 5
        [ -f $config ] || exit 6
        echo -n $"Starting $prog: "
        daemon $exec $config && success || failure                            
        retval=$?                                                             
        echo
        [ $retval -eq 0 ] && touch $lockfile                                  
        return $retval                                                        
}

cuando abro myapp.run obtengo (misma parte):

start() {
        if [ 1031 -ne 0 || 1031 -ne 80 ]; then
                echo "User has insufficient privilege." 
                exit 4
        fi
        [ -x  ] || exit 5
        [ -f  ] || exit 6
        echo -n $"Starting : "
        daemon   && success || failure
        retval=0
        echo
        [  -eq 0 ] && touch
        return
}

¿Qué estoy haciendo mal? ¿Por qué la variable UID obtiene 1031 y así sucesivamente?

gracias por todas las respuestas

Respuestas:


0

Estás utilizando un heredoc con <<EOF. En los shells 'sh' / bash, (como con la mayoría de los otros lenguajes de programación) las variables dentro de un heredoc se expanden en tiempo de ejecución, de la misma manera que dentro de las cadenas entre comillas dobles. Por ejemplo, $UIDse expande a la ID de usuario de quien ejecuta el archivo de especificaciones y $execse expande a una cadena vacía porque aún no se ha configurado.

$ cat <<EOF
> I am $USER
> EOF
I am grawity

Para evitar esto, ponga la cadena de límite entre comillas simples: <<'EOF'

$ cat <<'EOF'
> I am $USER
> EOF
I am $USER
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.