파일의 각 줄에서 폴더를 생성하는 아래 스크립트에 대해 몇 가지 우려 사항이 있습니다. 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 $fubar
I 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