Это - вероятно, одна из следующих 3 возможностей:
Вы называете сценарий непосредственно с интерпретатором, IE: удар script.sh
Название файла сценария имеет .sh расширение, которое заставляет систему искать программу по умолчанию для этого типа файла
Среда оболочки, которую Вы используете, выполняет 'эхо' отдельно, так как я могу только предположить, что файл сценария является исполняемым файлом. Например, при использовании оболочки удара и иметь команду в файле, который используется только ksh, то Вы будете видеть, что это не будет работать.
Удачи!
Необходимо рассмотреть возможность использования меньшего количества ресурсоемких опций виртуализации. Тот, который я имею в виду для Вашей проблемы, является "сетевым пространством имен", для которого Вы находите простое все же достаточное введение здесь.
С этой минималистической схемой виртуализации Вы обеспечиваете каждую оболочку точно один (виртуальный!) NIC, ни больше, ни меньше. Издержки являются созданием новой оболочки на пользователя, и Вы поддерживаете доступность всех Ваших программ. Можно затем запустить различные экземпляры той же программы, слушающей на том же порте различных интерфейсов.