Когда вы используете sudo, вы должны понимать, что вы запускаете другую программу, в данном случае другую оболочку. Это недоразумение, что вставка этих команд в терминале была бы такой же, как вставка их в сценарий. В результате после sudo терминал подключается к другому сеансу оболочки, а вторая и последующие команды отправляются в этот другой сеанс оболочки. Если вы поместите все команды в сценарий, все четыре команды будут выполнены в одном сеансе оболочки, что приведет к нежелательным результатам.
В этом конкретном случае я предлагаю вам поместить три последние команды в другой скрипт (например, setup-tap.sh), а затем вызвать этот скрипт как
sudo bash setup-tap.sh
Sourcing, как и предполагалось, является альтернативой для сохранения изменений вызова скрипта в текущей оболочке, но в этом случае он не будет работать. Он на один уровень выше, он может выглядеть как сценарий, поскольку терминал такой же, но в результате после sudo вы уже не в той же оболочке.
Это похоже на сценарий, подобный следующему:
vi file.txt
iThe quick brown fox jumps over the lazy dog.<ESC>:wq
Конечно, вторая строка (команды vi) не будет набрана в vi, она все равно будет в исходном скрипте.
Другой вариант - использовать здесь-документы и передавать привилегированные команды в sudo bash из стандартного ввода:
sudo bash <<-EOF
exec 4<>/dev/tap0
ifconfig tap0 10.10.10.1 10.10.10.255
ifconfig tap0 up
EOF