Como usar variáveis shell depois de fazer sudo su

1

Estou escrevendo um script para corrigir uma letra 'F' ausente em um arquivo de log de mensagens. O arquivo de log de mensagens está sendo atualizado continuamente. Eu estou recebendo um nome de arquivo, depois disso eu estou fazendo 'sudo su' para obter acesso de superusuário. Dentro do sudo, estou consertando o que falta 'F'. No entanto, não consigo usar esse nome de arquivo dentro do bloco sudo. Por favor alguém pode me ajudar como eu posso exportar essas variáveis de shell dentro do sudo? Eu tentei usar exportação, mas não está funcionando. O bloco de código que criei é o seguinte -

 #Script to solve F issue
#----------------------------------------
#By Kapil Shirsath
#----------------------------------------

cd /var/spool/mail        #mail files reside in mail folder
echo "Entered in mail folder"

filename='ls -lrt  99999*| sort -k 5 -rn | head -1 | tr -s " " "," | cut -d "," -f "8"'    # this will list the file with maximum size'

echo "File with maximum size is  $filename"
echo "----------------------------------------------------"
echo "Is it the file expected?(y/n)"
read choice
if test $choice == "n"
then
    echo "Exiting...."
    exit;
fi;

c=1
while [ $c -le 5 ]
do
    ls -lrt $filename
    echo $filename
    sleep 3
    c='expr $c + 1'
done
echo "---------------------------------------------------"

sudo su<<'HERE'   #this will give you super user permissions
echo "Got root access"
echo "First line of the file is as below :"
head -1 $filename
echo "---------------------------------------"
firstline='head -1 $filename'
echo "Repeat : $firstline"
echo $firstline | grep ^"rom" >/dev/null
if test $? -eq 0
then
ex -s $filename <<'EOF'
1s/^/F/
:wq
EOF
echo "F issue fixed!"
HERE


c=1
while [ $c -le 5 ]
do
    ls -lrt $filename
    sleep 3
    c='expr $c + 1'
done
echo "---------------------------------------------------"  
else
    echo "Not finding the missing 'F' ! !! Kindly check with your system "
    exit;
fi;
    
por kapil shirsath 30.06.2015 / 18:36

1 resposta

2

Você citou o delimitador heredoc:

sudo su<<'HERE'

Variáveis em um heredoc não são expandidas se o delimitador estiver entre aspas. A partir dos documentos :

  

Se qualquer caractere em palavra for citado, o delimitador é o resultado de   citação remoção em palavra , e as linhas no aqui-documento não são   expandido. Se palavra não estiver marcada, todas as linhas do documento aqui serão   sujeito a expansão de parâmetros, substituição de comando e aritmética   expansão, a sequência de caracteres \newline é ignorada e " \ " deve ser   usado para citar os caracteres " \ ", " $ " e " ' ".

Use apenas:

sudo su <<HERE

Exemplo:

$ a=1; cat <<HERE
> $a
> HERE
1
$ a=1; cat <<'HERE'
> $a
> HERE    
$a
    
por muru 30.06.2015 / 18:56