![切换到不同用户时使脚本正常工作](https://linux22.com/image/68890/%E5%88%87%E6%8D%A2%E5%88%B0%E4%B8%8D%E5%90%8C%E7%94%A8%E6%88%B7%E6%97%B6%E4%BD%BF%E8%84%9A%E6%9C%AC%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C.png)
我对下面的脚本有一些担忧,该脚本从文件中每行创建文件夹。 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 变量,它与其值相呼应,以回显$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