É difícil dizer o que você está tentando fazer, mas acho que isso é o que você quer:
#!/bin/bash
cat *.txt | while IFS= read -r line; do
mkdir -p -- "$line/Dir3/Dir4"
done
Isso lerá todos os arquivos .txt
no diretório atual e criará uma pasta com o caminho ./<line from file>/dir3/dir4
.
Se isso é o que você queria que acontecesse, o motivo pelo qual não estava funcionando é que $(ls -D)
listará apenas os arquivos no diretório atual. Não irá recorrer aos subdiretórios. Portanto, mesmo que o primeiro script tenha criado um diretório dir1/dir2
, o segundo script só verá o diretório dir1
.