
我正在編寫一個腳本來修復郵件日誌檔案中遺失的“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