Vous utilisez le mauvais type de guillemets.
Vous devez utiliser les guillemets inversés plutôt que les guillemets simples pour que l'argument soit un programme en cours d'exécution et transmettant le contenu à la boucle for.
for tbl in `cat /tmp/tables`
do
echo "$tbl"
done
Aussi pour une meilleure lisibilité (si vous utilisez bash), vous pouvez l'écrire comme
for tbl in $(cat /tmp/tables)
do
echo "$tbl"
done
Si vos attentes sont d'obtenir chaque ligne (les boucles for ci-dessus vous donneront chaque mot), alors vous feriez peut-être mieux d'utiliser xargs
, comme ça
cat /tmp/tables | xargs -L1 echo
ou en boucle
cat /tmp/tables | while read line; do echo "$line"; done
Les guillemets simples doivent être des backticks :
for tbl in `cat /etc/tables`
Cependant, cela ne vous donnera pas une sortie/entrée par ligne, mais par mot. Pour traiter ligne par ligne, vous devriez essayer quelque chose comme :
cat /etc/tables | while read line
echo $line
done