다른 사용자로 전환할 때 스크립트가 제대로 작동하도록 만들기

다른 사용자로 전환할 때 스크립트가 제대로 작동하도록 만들기

파일의 각 줄에서 폴더를 생성하는 아래 스크립트에 대해 몇 가지 우려 사항이 있습니다. Folder.list는 /scripts/에 있습니다. 첫 번째 스크립트는 원활하게 실행되지만 다른 사용자로 전환하려고 하면 두 번째 스크립트가 작동하지 않습니다.

--첫 번째 스크립트--

#!/bin/ksh
while read line
do
if [ ! -d $line ]
    then
     mkdir -p $line >/dev/null 2>&1 && echo "Directory $line created."
     else
    echo "Error: $line directory exists!"
   fi
done < folder.list

--두 번째 스크립트--

#!/bin/ksh
#Switch user
export SUDO_ASKPASS=/keys/askpass.sh
sudo -A su - appuser<<EOF

#Go to folder.list directory
cd /scripts/


while read line
do
if [ ! -d $line ]
    then
     mkdir -p $line >/dev/null 2>&1 && echo "Directory $line created."
    else
    echo "Error: $line directory exists!"
   fi
done < folder.list
EOF

답변1

더 명확하게 하기 위해

고려하다

cat <<EOF

foo bar $baz

EOF

fubar="Hello World"

cat <<EOF

echo $fubar
print \$fubar

EOF

실행하면 줄 것이다

foo bar


echo Hello World
print $fubar

첫 번째 고양이에서는 $baz 변수가 사라지는 것을 볼 수 있습니다(설정되지 않았다고 가정).

두 번째 실행에서는 해당 값을 에코하는 fubar 변수를 echo $fubarI escape 로 설정했습니다 $.

두 번째 스크립트는 다음과 같아야 합니다.

#!/bin/ksh
#Switch user
export SUDO_ASKPASS=/keys/askpass.sh
sudo -A su - appuser<<EOF

#Go to folder.list directory
cd /scripts/


while read line
do
if [ ! -d \$line ]
    then
     mkdir -p \$line >/dev/null 2>&1 && echo "Directory \$line created."
    else
    echo "Error: \$line directory exists!"
   fi
done < folder.list
EOF

관련 정보