ファイルの各行からフォルダを作成するための以下のスクリプトについていくつかの懸念があります。 Folder.listは/scripts/にあります。最初のスクリプトはスムーズに実行されますが、別のユーザーに切り替えようとすると、2番目のスクリプトは機能しません。
--最初のスクリプト--
#!/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
--2番目のスクリプト--
#!/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変数が消えることがわかります(設定されていないと仮定)。
2番目の実行では、その値をエコーするfubar変数をecho $fubar
I escapeに設定しました$
。
2番目のスクリプトは次のようにする必要があります。
#!/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