arquivo de especificação rpm com problema 'cat'

0

Estou escrevendo um arquivo spec no qual eu quero colocar o script para executar o processo a partir do diretório init.d. Aqui faz parte do arquivo 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                                                        
}

quando eu abro myapp.run eu recebo (mesma 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
}

O que estou fazendo errado? Por que o UID variável recebe 1031 e assim por diante?

thx para todas as respostas

    
por JosiP 26.08.2011 / 13:33

1 resposta

0

Você está usando um heredoc com <<EOF . Nos shells 'sh' / bash, (como na maioria das outras linguagens de programação) as variáveis dentro de um heredoc são expandidas em tempo de execução, da mesma maneira que dentro de strings com aspas duplas. Por exemplo, $UID é expandido para o ID do usuário de quem executa o arquivo de especificação e $exec é expandido para uma cadeia vazia porque ainda não foi definido.

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

Para evitar isso, coloque a string de limite entre aspas simples: <<'EOF'

$ cat <<'EOF'
> I am $USER
> EOF
I am $USER
    
por 26.08.2011 / 14:20

Tags