Rangana Herath celebrated his 35th birthday with a career-best 7-89 as Sri Lanka dismissed Bangladesh for 265 in their second innings at lunch in the second and final Test in Colombo on Tuesday.
Sri Lanka, who gained a 106-run lead, now need 160 to win the match and the series after the opening Test in Galle ended in a draw.
Bangladesh added 107 to their overnight total of 158-4, with Herath taking four of the six wickets in the morning session.
The Sri Lankan spinner, who bagged 5-68 in the first innings, also completed his third haul of 10 or more wickets in a Test.
Skipper Mushfiqur Rahim (40) offered some resistance before becoming Herath's 200th Test victim, caught by Angelo Mathews at first slip after hitting one six and three fours in his 87-ball knock.
Tailender Abul Hasan cracked two sixes in his unbeaten 25 to help his team cross the 250-mark.
Herath struck in his opening over of the morning, having Mominul Haque caught by Dimuth Karunaratne at short-leg with a delivery that turned and bounced.
Mominul managed to add just one to his overnight score of 36.
Herath, who struck three times on Monday, claimed his fifth wicket when he bowled Nasir Hossain for a duck in his third over to reduce Bangladesh to 171-6.
Bangladesh counter-attacked, with Rahim smashing Herath for a straight six and Sohag Gazi (26) later lofting the spinner over long-off for his first six.
Gazi kept playing his shots despite being dropped on 14 by Karunaratne at second slip off paceman Nuwan Kulasekara.
Gazi hit the next two deliveries for fours but his flourish did not last long. He was caught by Suranga Lakmal at long-on while attempting a big slog off Herath, who shared the new ball with Kulasekara.
Sri Lanka on Monday were bowled out for 346 in their first innings in reply to Bangladesh's 240.