Ce qui me surprend, c'est l'absence de point-virgule ( ;) dans votre solution, est-ce que votre problème persiste quand vous le faites :
for d in *; do echo $d >> directories.txt; done
? Cela fonctionne bien pour moi. De plus, vous êtes sûr que vous l'exécutez en bash ? Enfin, le ">>" pourrait être le problème, vous pourriez ajouter le nom des répertoires plusieurs fois.
Sans compter que si vous voulez lister uniquement les répertoires (pas les fichiers), vous pourriez plutôt le faire :
for d in `find . -type d -maxdepth 1`; do echo $d >> directories.txt; done
ou encore plus simple :
find . -type d -maxdepth 1 > directories.txt