A stubborn sixth-wicket partnership of 81 means England still need five wickets on day five to win the first Test with Bangladesh.
Alistair Cook's men batted on for 12 overs on the fourth morning and eventually declared on 191-5, setting the hosts 522 to win.
Bangladesh were then reduced to 110-5 before an unbeaten partnership of 81 between Junaid Siddique and Mushfiqur Rahim saw then reach 191-5 at stumps.
England began day five on 135-5 with Ian Bell and Matt Prior at the crease and they progressed to 144 before Prior fell to Shakib Al Hasan for just seven.
Graeme Swann joined Bell and hit a rapid 32 before Shakib snared the off-spinner to prompt the declaration, with Bell unbeaten on 39.
England made early inroads into the Tigers' top order with Swann once again taking a wicket early in his spell.
The Nottinghamshire man bowled talented youngster Tamim Iqbal for 14 before Steven Finn took his second wicket in Test cricket with the scalp of Imrul Kayes for 23 - Prior taking the catch behind the wicket.
Aftab Ahmed made 26 before he was caught behind off Tim Bresnan and the same bowler accounted for Mahmudullah, who was bowled for just five.
Shakib completed a dreadful few overs for the home side when he was trapped in front by Swann for four and Bangladesh had slipped from 99-2 to 110-5.
But Siddique, who finished the day on 68, and Mushfiqur, who will begin tomorrow morning on 47, guided the Asians to the close without further loss, to give themselves a chance of saving the match on day five.
Bresnan finished the day with 2-45 while Swann has figures of 2-61.
England will be strong favourites to win the match on the final day but questions will be asked as to why they continued to bat on against the weakest side in Test cricket with a huge lead already secured.