Prabath Jayasuriya, Lahiru Kumara and Kamindu Mendis each claimed two wickets as Sri Lanka came within grasp of another resounding victory in the second and final Test on Tuesday.
Bangladesh were 268-7 at stumps on the fourth day in Chittagong, still needing 243 runs for an improbable win.
Mehidy Hasan Miraz played an unbeaten knock of 44 to take the game into the fifth day with Taijul Islam accompanying him on 10.
Mominul Haque was the only other batsman to put up a fight, making 50 off 56 balls before he was dismissed by the spinner Jayasuriya in the last over before tea break.
Shakib Al Hasan and Liton Das put on 61 runs for the fifth wicket after Mominul's dismissal.
Off-spinner Kamundu broke the stand as Nishan Madushka took a brilliant reflex catch at silly point to dismiss Shakib for 36.
Liton got the bottom edge in an attempt for a pull shot off Kumara to depart three overs later for 38.
Kamindu broke another promising partnership of 46 runs between Mehidy and Shahadat Hossain, trapping the latter leg before for 15.
Mahmudul Hasan (24), fellow opener Zakir Hasan (19), and skipper Najmul Hossain Shanto (20) were all sent back cheaply.
Jayasuriya bowled Mahmudul to break the 37-run opening stand.
Zakir gave a catch to Dhananjaya de Silva off Vishwa Fernando at slip, and Lahiru clipped the bail of Najmul's off-stump.
Resuming on 102-6, Sri Lanka batted for a little over an hour to add 55 runs to their overnight score before declaring at 157-7.
Angelo Mathews, unbeaten on 39 overnight, top-scored with 56 runs. He was bowled by Shakib after making his 41st Test fifty.
Jayasuriya was unbeaten on 28 when the declaration came, along with Vishwa Fernando, who was eight not out.
Debutant pace bowler Hasan Mahmud finished with 4-65 for Bangladesh.
Sri Lanka were missing Dinesh Chandimal in the field after he returned home for a family emergency.
Sri Lanka, who have never lost a Test series to Bangladesh, thrashed the hosts by 328 runs in the first Test at Sylhet.