permissão negada no script em execução apesar de + x

1

O script está na partição exec (em / home / ~~~) e tem o sinalizador + x (-rwxr-xr-x).

executável no bash shell (não com script), mas não no script. script é bem simples.

#!/bin/bash

data=cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'
echo data : $data

resultado:

/home001/myaccount/uploader.sh: line 3: /home001/myaccount/mydirectory/.git/config: Permission denied

A permissão do arquivo de destino é simbólica e 777, como abaixo.

lrwxrwxrwx

Mas executável e funcionando bem na linha de comando do bash.

myaccount@myserver:~/mydirectory$ cat $PWD/.git/config|awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'
mybranch

O script tem o sinalizador + x e na partição executável. Também executável sem script, mas não no script. Por quê?

    
por Yoon-Geun Kwon 11.03.2015 / 06:24

1 resposta

2

O problema está nesta linha:

data=cat $PWD/.git/config

Isso define temporariamente a variável de shell data para ter o valor cat e, em seguida, tenta executar o arquivo $PWD/.git/config . Isso é lamentável porque você provavelmente não queria executá-lo.

Você provavelmente pretendeu:

data=$(cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}')

O exemplo acima executará seu comando cat , enviando sua saída para awk e salvando a saída do awk na variável data . Se é isso que você queria, o cat é supérfluo. Substitua o acima por:

data=$(awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}' $PWD/.git/config)

Interpretando a mensagem de erro

/home001/myaccount/uploader.sh: line 3: /home001/myaccount/mydirectory/.git/config: Permission denied

Pelo exposto, sabemos que uploader.sh estava sendo executado. Isso significa que não houve problemas com as permissões de uploader.sh . O erro ocorre na linha 3 de uploader.sh , que é o comando:

data=cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'

O erro Permission denied ocorreu enquanto o shell estava tentando executar esta linha.

    
por 11.03.2015 / 06:29