ฉันกำลังเขียนสคริปต์โรงงานสคริปต์ขนาดใหญ่ที่สร้างสคริปต์บำรุงรักษามากมายสำหรับเซิร์ฟเวอร์ของฉัน
จนถึงตอนนี้ฉันเขียนบางบรรทัดที่ต้องเขียนเป็นบรรทัดเดียว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
ไม่มีชื่อผู้ใช้จะขอรหัสผ่านเว้นแต่ว่าคุณพิมพ์ไว้ว่ามีความล่าช้า มันยิ่งแย่กว่านี้หากคุณไม่ได้เรียกใช้สคริปต์ในเทอร์มินัลคุณจะไม่สามารถมองเห็นการสืบค้นรหัสผ่านและมันจะไม่ทำงาน sudo -u
วิธีการไม่ได้มีปัญหาเหล่านี้
sudo
สคริปต์ที่คุณทำผิดให้รันสคริปต์ทั้งหมดเป็นรูทแทน!