sudo su を実行した後にシェル変数を使用する方法

sudo su を実行した後にシェル変数を使用する方法

メール ログ ファイルで欠落している 'F' 文字を修正するスクリプトを作成しています。メール ログ ファイルは継続的に更新されています。ファイル名を取得した後、スーパーユーザー アクセスを取得するために 'sudo su' を実行しています。sudo 内で、欠落している 'F' を修正しています。ただし、sudo ブロック内でそのファイル名を使用することはできません。sudo 内でこれらのシェル変数をエクスポートする方法を誰か教えてください。エクスポートを使用してみましたが、機能しません。作成したコード ブロックは次のとおりです。

 #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

ヒアドキュメント区切り文字を引用しました:

sudo su<<'HERE'

区切り文字が引用符で囲まれている場合、ヒアドキュメント内の変数は展開されません。ドキュメントから:

もし、言葉引用されているデリミタ引用を削除した結果言葉、ヒアドキュメント内の行は展開されません。言葉引用符が付いていないと、ヒアドキュメントのすべての行はパラメータ展開、コマンド置換、および算術展開の対象となり、文字シーケンスは\newline無視され、文字 ' '、' '、および ' '\を引用符で囲むには ' ' を使用する必要があります。\$`

次のように使用します:

sudo su <<HERE

例:

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

関連情報