Проблема в том, что вы не понимаете сути команд.
У вас не запуск нескольких команд в баше, а запуск конкретной программы, а затем выполнение команд уже не в баше, а в этой программе. Баш тут уже не причем.
Тут нужно разобраьтся как работает ваша программа. Если она просто ждет ввода пользователя, можно взять, написать список команд (каждая команда в новой строке) в отдельный текстовый файлик и перенаправить его в вашу программу, тогда она будет думать что это пользователь очень быстро все вводит.
вот как пример echo -ne "uci\n" |stockfish
то есть перенаправляем команду в команду, словно ее ввел пользователь.
Если нужно проверять результат вывода, это уже отдельный вариант. Но нужно уточнить как stockfish себя ведет, если можно выполнить одну команду в stockfish и выйти, то можно как-то так
result="$( echo -ne "uci\nexit\n" | stockfish)"
echo "result is [$result]"
ну и проверять.
Короче тут нужно с самим stockfish разобраться.Или изучить как работает expect