執行 sudo su 後如何使用 shell 變數

執行 sudo su 後如何使用 shell 變數

我正在編寫一個腳本來修復郵件日誌檔案中遺失的“F”字母。郵件日誌檔案不斷更新。我得到一個文件名,之後我執行“sudo su”以獲得超級用戶訪問權限。在 sudo 內部,我正在修復缺少的“F”。但是,我無法在 sudo 區塊內使用該檔案名稱。請誰能幫我如何在 sudo 中匯出這些 shell 變數?我嘗試使用導出,但它不起作用。我創建的程式碼區塊如下-

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

答案1

您引用了heredoc分隔符號:

sudo su<<'HERE'

如果定界符被引用,則定界符中的變數不會擴展。來自文件:

如果其中有任何字符單字被引用,則分隔符是刪除引號的結果單字,並且此處文檔中的行未展開。如果單字未加引號,此處文件的所有行都會進行參數擴展、命令替換和算術擴展,\newline忽略字元序列,並且\必須使用 ' ' 來引用字元 ' \'、' $' 和 ' `'。

只需使用:

sudo su <<HERE

例子:

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

相關內容