Bath scored second-half tries through Dan Hipkiss and Nathan Catt to win a full-blooded west country derby at the Recreation Ground but could not stop Exeter claiming a losing bonus point with a last-minute penalty try.
It meant that instead of slipping to third place behind Bath in the Aviva Premiership Rugby table, it was the Devon side who clung on to second behind unbeaten Harlequins.
It was a red letter day for Bath's Duncan Bell, making his 200th appearance on the tighthead, while skipper Stuart Hooper returned after injury and Guy Mercer came into the back row for the injured Simon Taylor. Scottish scrum-half Mark McMillan was given a rare start, with Michael Claassens taking a break on the bench.
A Sam Vesty penalty put Bath into the lead in the second minute and they might have scored a try when Ignacio Mieres badly sliced a clearance. Ben Williams fielded the ball just short of the Exeter line but the visitors were content to concede a second penalty to Vesty on 11 minutes.
The Devon side won a penalty almost straight from the restart, however, and Mieres kicked the goal from 40 metres.
Another attempt from half-way by the Argentinian struck the post and McMillan set off on an elusive run, threatening to break through the onrushing Exeter defensive line. His chip from the ruck almost put Matt Carraro clear as Bath searched for an opening, even from long range.
After a quiet start, Exeter's forwards were beginning to find an edge in the scrum and forced their best chance from a penalty and line-out. It took a crunching tackle from Tom Biggs to stop Jason Shoemark in his tracks.
Nick Abendanon was equal to Mieres' aerial barrage, however, and McMillan's quick service kept Bath's game at high tempo. When the visitors conceded another penalty on the half-hour, Vesty added three more points from 40 metres to give Bath a 9-3 lead.
In the increasingly wet conditions, Exeter preferred the more direct route and a well-organised catch and drive forced a penalty five minutes later, Mieres finding the target from a narrow angle. Bath lost Ben Williams to injury but might have added to their lead only for Vesty to push his kick wide.
Bath quickly added to their 9-6 interval lead when Hipkiss broke through Tom Johnson's tackle and outpaced Haydn Thomas on a spectacular 60-metre run to the line. Vesty added to the conversion but Mieres added his third penalty on 48 minutes.
Bath responded by ringing the changes up front, replacing David Flatman and Bell with the younger Nathan Catt and Kane Palma-Newport, balanced by the experience of Claassens at the base of the scrum. But Exeter pulled back another three points through the boot of Mieres on 54 minutes.
Exeter offered little threat behind the scrum but were alert to the counter, as when Shoemark combined dangerously with Bryan Rennie only to concede a penalty 50 metres upfield. The most dangerous runner on the field was still Abendanon, however, providing most of Bath's spark in attack with his forays from full-back.
Fresh legs livened up Exeter's forward effort too but it was Bath who finished stronger, gaining momentum from strong running by Carraro and Hipkiss before the forwards drove over and the TV match official signalled a 71st-minute try by Catt. Vesty added the points.
Exeter attacked desperately in the closing minutes in search of the try that would earn them a losing bonus point, opting for scrums rather than a kick at goal. It paid off as Bath infringed once too often and referee David Rose ran underneath the posts to signal a penalty try. Mieres added the conversion.
There was still time for a frantic finish as Exeter refused to give up hope of outright victory but it was not to be.