So verwenden Sie Shellvariablen nach der Ausführung von „sudo su“

So verwenden Sie Shellvariablen nach der Ausführung von „sudo su“

Ich schreibe ein Skript, um einen fehlenden Buchstaben „F“ in einer Mail-Logdatei zu korrigieren. Die Mail-Logdatei wird ständig aktualisiert. Ich erhalte einen Dateinamen und führe anschließend „sudo su“ aus, um Superuser-Zugriff zu erhalten. Innerhalb von sudo behebe ich das fehlende „F“. Ich kann diesen Dateinamen jedoch nicht innerhalb des Sudo-Blocks verwenden. Kann mir bitte jemand helfen, wie ich diese Shell-Variablen innerhalb von sudo exportieren kann? Ich habe versucht, „export“ zu verwenden, aber es funktioniert nicht. Der Codeblock, den ich erstellt habe, ist wie folgt:

 #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;

Antwort1

Sie haben das Heredoc-Trennzeichen zitiert:

sudo su<<'HERE'

Variablen in einem Heredoc werden nicht erweitert, wenn das Trennzeichen in Anführungszeichen steht.Aus den Dokumenten:

Wenn irgendwelche Zeichen inWortzitiert werden, dieTrennzeichenist das Ergebnis der Zitatentfernung aufWort, und die Zeilen im Here-Dokument werden nicht erweitert. WennWortist nicht in Anführungszeichen gesetzt, alle Zeilen des Here-Dokuments unterliegen der Parametererweiterung, Befehlsersetzung und arithmetischen Erweiterung, die Zeichenfolge \newlinewird ignoriert und die Zeichen ' ', ' ' und ' ' \müssen mit ' ' in Anführungszeichen gesetzt werden .\$`

Benutz einfach:

sudo su <<HERE

Beispiel:

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

verwandte Informationen