Stai usando il tipo sbagliato di virgolette.
Devi usare le virgolette rovesciate piuttosto che le virgolette singole per fare in modo che l'argomento sia un programma in esecuzione che invia il contenuto al forloop.
for tbl in `cat /tmp/tables`
do
echo "$tbl"
done
Inoltre, per una migliore leggibilità (se stai usando bash), puoi scriverlo come
for tbl in $(cat /tmp/tables)
do
echo "$tbl"
done
Se le tue aspettative sono di ottenere ogni riga (i cicli for sopra ti daranno ogni parola), allora potrebbe essere meglio usare xargs
, come questo
cat /tmp/tables | xargs -L1 echo
o come loop
cat /tmp/tables | while read line; do echo "$line"; done
Le virgolette singole devono essere apici inversi:
for tbl in `cat /etc/tables`
Tuttavia, questo non ti darà output/input per riga, ma per parola. Per elaborare riga per riga, dovresti provare qualcosa come:
cat /etc/tables | while read line
echo $line
done