Opener Aiden Markram (94), playing on his home ground, missed a well-deserved century by a whisker after he was caught behind off Ashwin (2-53). Overall, he faced 150 balls and hit 15 fours.
At the break, Hashim Amla (35) and AB de Villiers (16) were at the crease.
India then attacked Amla with short stuff and also tried to lure him outside the off-stump. Jasprit Bumrah (0-43) was unimpressive in this spell, unable to find the right line to attack the batsmen.
Meanwhile, Amla and Markram added 63 runs for the second wicket.
Markram's wicket came against the run of play. He asked for DRS review and was a tad unlucky as the edge was doubtful. But there wasn't sufficient evidence to overturn the on-field umpire's decision.
Amla got a reprieve at 30 when he was dropped by Parthiv Patel off Ishant in the 51st over, the ball going down leg side after the batsman edged it.
Elgar and Markram had started watchfully against the new-ball pairing of Bumrah and Shami, the latter conceding 23 runs off his four overs.
The new ball bowlers failed to create any chances, and Ishant came on as first-change in the 8th over. He immediately troubled Elgar and continued to do so throughout his first spell.
Hardik Pandya (0-20) came on to bowl in the 13th over. By the 20th over, when Ashwin was introduced into the attack, India had used up all their frontline bowlers in just over an hour's play.
Ashwin too probed Elgar, and in the 24th over, had a caught-behind appeal turned down. India opted for DRS review but there was no edge.
The Proteas had crossed 50 in the 21st over. Meanwhile, Markram reached his second Test half-century off 81 balls, just before the break.
This was after South Africa won the toss and opted to bat. The hosts made one change, handing a Test debut to 21- year-old pace Lungi Ngidi at his home ground. He came in the side in place of injured Dale Steyn.
India made three changes to their eleven, with KL Rahul replacing Shikhar Dhawan and Ishant Sharma coming in for Bhuvneshwar Kumar.
Wriddhiman Saha was ruled out due to a strain and he was replaced with Parthiv Patel.
(This story has not been edited by Business Standard staff and is auto-generated from a syndicated feed.)