Я розповсюджую VM студентам для курсу програмування для початківців. Для швидкості, замість того, щоб змусити їх встановити Ubuntu з нуля, я планую дати їм повністю налаштоване зображення, яке вони можуть просто запустити.
Для того, щоб налаштувати його, я дав йому жертовне ім’я хоста, ім’я користувача та пароль. Який найчистіший спосіб змінити це для учнів, коли вони встають і працюють?
У мене є ця суть , яка має деякий ненадійний прогрес щодо імені хоста, але ім’я користувача чинить опір мені змінити його.
Мені б хотілося, щоб це був максимально безболісний процес, оскільки це повинно відбуватися в їхній першій лабораторії.
Цілком можливо, що я повинен застосувати зовсім інший підхід. Я відкритий до всіх пропозицій.
#!/bin/bash
clear
toilet " CODE1161 " --metal --font future
echo ""
toilet "Let's get started!" --metal --font future
echo ""
echo "We need to make this computer be YOURS"
echo "We need a name for you and your computer, make it short or it'll take up a lot of space."
echo "My computer is called um and my name is ben, so I get ben@um:~$ as my command prompt."
echo ""
read -p "Enter a name for your computer:" compname
read -p "Enter your name: " username
echo ""
toilet "$username@$compname~$" --gay --font wideterm
echo ""
echo "What do you think? If you hate it, press ctrl+c and do this again"
read -p "otherwise, just press enter." sacrificial
# set the host name, in a million places, for some unknown reason.
echo "1"
sed -i "/127\.0\.1\.1\s*vc/ { c \
127.0.1.1 $compname
}" /etc/hosts
echo "2"
sudo hostname -b $compname
echo "3"
sudo hostnamectl set-hostname $compname
echo "4"
sudo groupadd $username
echo "5"
sudo usermod -d /home/$username -m -g $username -l $username ben
expectінтерактивний процес і робив його неінтерактивним. В основному, створення сценарію, який expectпевний вихід, і відповідь, яка вже відома в сценарії. Бен хоче дочекатися введення користувача та виконати на його основі команду. Зрозуміло, я помиляюся хоча б раз на день, тому це може бути так.
exec bashале це технічно відкриє вкладений термінал.
sedна щось подібне. sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts Це оновить рядок 127.0.1.1 і просто додасть новий хост до того, що там є. Він залишить старий хост на місці, але він сумісний із тим, що одному хосту призначено кілька хостів. Це дозволить уникнути нерозв’язної проблеми з вашою іншою sudoкомандою, змінивши ім'я хоста.

expect- admin-magazine.com/Articles/Automating-with-Expect-Scripts