Sim, alterar o diretório de trabalho é complicado e não exatamente o que você gostaria de fazer, pois pode levar a situações extremamente estranhas em scripts mais complexos, a menos que você seja cuidadoso.
O método usual para alterar o diretório de trabalho de um comando simples é colocar o cd e a invocação do comando em um sub-shell. O diretório de trabalho será alterado para o sub-shell, mas a mudança não será transferida para o restante do script, pois o sub-shell está sendo executado em seu próprio ambiente.
Exemplo: Executando mycommand dentro de todos os diretórios no diretório de trabalho atual:
for d in *; do
if [ -d "$d" ]; then # or: if test -d "$d"; then
( cd "$d" && mycommand )
fi
done
ou no seu caso, com diretórios conhecidos a e b :
for d in a b; do
( cd "$d" && dsmmigrate * & )
done
Não conheço a ferramenta dsmmigrate , por isso não posso dizer se a execução desta maneira é correta ou não.
EDITAR: Acontece que o dsmmigrate tool tem um sinalizador -Recursive :
$ dsmmigrate -Recursive /path