Opener Kieran Powell smashed a century in each innings before Bangladesh captured late wickets to keep hopes of an unlikely result in the first Test in Dhaka on Friday.
The 22-year-old right-handed batsman scored 110 for his second century of the match to anchor his team to 244-6 at close on the fourth day, leading by 215 runs and setting up an intriguing fifth and final day.
In the morning Bangladesh were dismissed for 556 runs in their first innings, taking a slender 29-run lead over the West Indies first knock of 527-4 declared.
Powell, who made 117 in the first innings, batted with resolve and authority and added 189 runs for the second wicket with Darren Bravo who made 76.
But left-arm spinner Shakib Al Hasan dismissed Powell and Denesh Ramdin for five and debutant Sohag Gazi took two wickets to stop the West Indian run flow sparked by Powell and Bravo.
Their stand is a new record for the second wicket against Bangladesh, beating the previous stand of 87 was between Chris Gayle and Ramnaresh Sarwan at Gros Islet in 2004.
Here Gayle failed again, scoring only 19 before falling to paceman Rubel Hossain.
Bangladesh could have dismissed Powell early but Junaid Siddique dropped a straight-forward catch off paceman Shahadat Hossain. Powell was only 17 then.
He took full advantage of the life and together with Bravo boosted the total to 124-1 at tea, pacing the innings well in the last session.
Powell hit Shakib for a towering six before reaching his hundred with three boundaries in one Rubel over. In all he hit 12 boundaries off 197 balls.
Earlier, Nasir Hossain missed his maiden hundred by just four runs but still helped Bangladesh overhaul the West Indian total.
The 20-year-old Nasir, playing only his fifth Test, hit four sixes and six boundaries during his fiery 136-ball knock - improving on his previous best of 79 against Pakistan at the same venue last year.
Resuming at 455-6, Bangladesh were guided towards the West Indian total by a solid 121-run stand for the seventh wicket between Nasir and Mohammad Mahmudullah (62) before Sunil Narine took two quick wickets.
Sensing Bangladesh would fell short of the West Indian total, Nasir took the attack to himself by adding 61 for the ninth wicket with Shahadat Hossain (13) and during the stand also took his team into the lead.
Nasir hit two sixes off Veerasammy Permaul and one off Narine to enter 90s but was caught off a miscued lofted shot off paceman Tino Best.
Paceman Ravi Rampaul and Narine finished with three wickets apiece.
The second and final Test will start in Khulna from November 21.