Там нет необходимости в петле оболочки:
gzip -cd $(<list.txt) | ./a.out
С опцией '-cd
', GZIP распаковывает список файлы на стандартный вывод (или вы можете использовать «gunzip -c
»). Обозначение $(<file)
расширяет содержимое именованного файла в виде списка аргументов без запуска подпроцесса. В противном случае это эквивалентно $(cat list.txt)
.
Однако, если вы чувствуете, что вы должны использовать цикл, то просто труба на выходе из контура в одном экземпляре вашей программы:
for i in `cat list.txt`
do
gunzip -c $i
done |
./a.out
Если содержимое цикла являются более сложными (чем просто удалив один файл), это может быть необходимо.Вы также можете использовать '{ ... }
' перенаправлении ввода/вывода:
{
cat /etc/passwd /etc/group
for i in `cat list.txt`
do
gunzip -c $i
done
} |
./a.out
Или:
{
cat /etc/passwd /etc/group
for i in `cat list.txt`
do
gunzip -c $i
done; } |
./a.out
Примечание полу-ободочной кишки; это необходимо с помощью брекетов. В этом примере, это по существу такой же, как с помощью формального подоболочку со скобками:
(
cat /etc/passwd /etc/group
for i in `cat list.txt`
do
gunzip -c $i
done
) |
./a.out
Или:
(cat /etc/passwd /etc/group
for i in `cat list.txt`
do
gunzip -c $i
done) |
./a.out
Обратите внимание на отсутствие запятой здесь; он не нужен. Корпус чудесно изогнут. Скобы Перенаправление ввода/вывода могут быть полезны, когда вам нужно сгруппировать команды после символа трубы:
some_command arg1 arg2 |
{
first sub-command
second command
for i in $some_list
do
...something with $i...
done
} >$outfile 2>$errfile
Обратите внимание, что gzip поставляется с программой 'gzcat', которая эквивалентна' gunzip -c'. – greyfade