我正在写一个庞大的脚本工厂脚本,为我的服务器生成许多维护脚本。
到现在为止,我写了一些行,需要用echo -ne
例如一行
echo -n "if (( " | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
# Generate exitCode check for each Server
IFS=" "
COUNT=0
while read -r name ipAddr
do
if(($COUNT != 0))
then
echo -n " || " | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
fi
echo -n "(\$"$name"_E != 0 && \$"$name"_E != 1)" | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
COUNT=$((COUNT+1))
JOBSDONE=$((JOBSDONE+1))
updateProgress $JOBCOUNT $JOBSDONE
done <<< "$(sudo cat /root/.virtualMachines)"
echo " ))" | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
这会生成我(如果我的配置文件中有例如2个服务器)代码,例如
if (( ($server1_E != 0 && $server1_E != 1) || ($server2_E != 0 && $server2_E != 1) ))
所有其他不需要此内联代码编写的代码块都是我用heredocs生成的,因为我发现它们可以更好地编写和维护。例如,在上面的代码之后,我生成了其余的代码
cat << EOF | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
then
# Print out ExitCode legend
echo " ExitCode 42 - upgrade failed"
echo " ExitCode 43 - Upgrade failed"
echo " ExitCode 44 - Dist-Upgrade failed"
echo " ExitCode 45 - Autoremove failed"
echo ""
echo ""
fi
EOF
所以最终的代码块看起来像
if (( ($server1_E != 0 && $server1_E != 1) || ($server2_E != 0 && $server2_E != 1) ))
then
# Print out ExitCode legend
echo " ExitCode 42 - upgrade failed"
echo " ExitCode 43 - Upgrade failed"
echo " ExitCode 44 - Dist-Upgrade failed"
echo " ExitCode 45 - Autoremove failed"
echo ""
echo ""
fi
我的问题
是否有一种使Heredoc表现得与echo -ne
没有行尾符号相似的方式?
sudo -u USERNAME
上是不是,看我如何运行脚本内部有一个“须藤”命令?。
sudo
没有用户名的脚本会要求输入密码,除非您输入密码有延迟。更糟糕的是,如果您不在终端中运行脚本,那么您甚至看不到密码查询,这将毫无用处。该sudo -u
方法没有任何这些问题。
sudo
脚本,那您就错了:以root身份运行整个脚本!