Como usar variáveis ​​​​shell depois de fazer sudo su

Como usar variáveis ​​​​shell depois de fazer sudo su

Estou escrevendo um script para corrigir uma letra 'F' ausente em um arquivo de log de e-mail. O arquivo de log de correio é atualizado continuamente. Estou recebendo um nome de arquivo, depois faço 'sudo su' para obter acesso de superusuário. Dentro do sudo, estou consertando aquele 'F' ausente. No entanto, não consigo usar esse nome de arquivo dentro do bloco sudo. Por favor, alguém pode me ajudar como posso exportar essas variáveis ​​​​do shell dentro do sudo? Tentei usar a exportação, mas não funcionou. 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;

Responder1

Você citou o delimitador heredoc:

sudo su<<'HERE'

Variáveis ​​em um heredoc não são expandidas se o delimitador estiver entre aspas.Dos documentos:

Se algum personagem empalavrasão citados, odelimitadoré o resultado da remoção de cotação empalavra, e as linhas no documento aqui não são expandidas. Sepalavranão está entre aspas, todas as linhas do documento aqui estão sujeitas a expansão de parâmetros, substituição de comandos e expansão aritmética, a sequência de caracteres \newlineé ignorada e ' \' deve ser usado para citar os caracteres ' \', ' $' e ' `'.

Apenas use:

sudo su <<HERE

Exemplo:

$ a=1; cat <<HERE
> $a
> HERE
1
$ a=1; cat <<'HERE'
> $a
> HERE    
$a

informação relacionada