Bangladesh left-arm spinner Taijul Islam took 6/135 but the touring side struggled with the bat as they limped to 139 for five at the close on day two of the second and final Test against South Africa on Saturday.
Bangladesh are still 314 runs behind their hosts’ total of 453 all out at St George’s Park and their first aim will be to avoid the follow-on when Mushfiqur Rahim (30 not out) and Yasir Ali (8 not out) resume on the third morning.
Seamer Wiaan Mulder (3-15) has been the pick of the home bowlers, removing Tamim Iqbal lbw for a brisk 47.
He did likewise to Najmul Hossain Shanto (33) as Bangladesh suffered a double blow following a solid start to their innings.
Mulder bagged his third lbw of the innings when he snared captain Mominul Haque (6) as he bowled a superb tight line with just a hint of swing into the pads.
Bangladesh also lost first test centurion Mahmudul Hasan Joy for a duck as he edged seamer Duanne Olivier (2-17) to Sarel Erwee at first slip, and Olivier bowled the dangerous Litton Das (11) with a superb delivery that knocked over middle stump.
South Africa, who lead 1-0 in the series following a 220-run victory in Durban, had resumed their first innings on 278 for five having won the toss.
Captain Dean Elgar spoke before the game of the importance of the batsmen scoring hundreds after a barren run for the side, but the latest to fail was spinning all-rounder Keshav Maharaj, who compiled an excellent 84 from 95 balls before he was bowled following an ugly swipe across the line off the bowling of Taijul.
Elgar (70), Temba Bavuma (67) and Keegan Petersen (64) also passed 50 but failed to bring up three figures. It was, however, the first time in test history that nine batsmen reached 20 in a completed innings.
Taijul brought up 150 test wickets as he bowled with superb control on his return to the side having replaced injured seamer Taskin Ahmed in the side.