Я рад, что взаимодействие между dos и WSL на самом деле ожидает завершения команд sh. Попробуйте следующее:
В файле с именем runit.bat
echo bat01
bash -c "echo bat02; cd ./bash/; ./runit.sh; echo bat03"
echo bat04
В подпапке с именем ./bash/ вставьте следующее в файл с именем runit. sh
echo sh01
sleep 2s
echo sh02
Когда вы запускаете runit.bat
изнутри dos, вы увидите 2 секунды ожидания
Вы не указали, что находится внутри вашего скрипта ./foo. Я подозреваю, что он запускает задачу в фоновом режиме или запускает что-то, что немедленно возвращается. Это можно смоделировать, поместив &
после сна, чтобы он работал в фоновом режиме в пределах wsl sleep 2s &
. Когда вы сделаете это, вы увидите, что в выполнении скрипта нет паузы.
Так что я бы проверил ./foo, возможно, добавил бы внутри него несколько операторов отладки echo и сначала запустил бы его из WSL, чтобы убедиться, что что он действительно ожидает завершения всех команд, прежде чем завершится.