No Bash, existem duas maneiras de gravar em um arquivo (tecnicamente, há muito mais, mas para todos os efeitos desta resposta, existem dois):
Primeiro, é o operador >
, como você está usando nesta linha:
echo Course Attendees > list
O operador >
irá sobrescrever qualquer coisa existente no arquivo com o novo conteúdo do arquivo. Na verdade, ele exclui o arquivo e cria um novo com o mesmo nome.
Em segundo lugar, o operador >>
, como usado aqui:
echo $name >> list
Isso adicionará linhas a um arquivo existente, ou criará um novo caso ele não exista.
Quando você executa seu script, sempre sobrescreve sua lista de cursos com o cabeçalho "Participantes do curso", causando esse erro. Altere seu programa para anexar apenas linhas se o cabeçalho "Participantes do curso" estiver presente. Minha sugestão pessoal seria verificar se o arquivo existe. Em caso afirmativo, use apenas a operação de acréscimo. Caso contrário, dê o cabeçalho e crie-o.
Ou, mais elegantemente, execute somente echo Course Attendees > list
se o arquivo não existir. Veja esta resposta SO para mais informações sobre como executar uma verificação como esta.