シェルループは必要ありません。
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
ループの内容が(単一のファイルを単にガンジップするよりも)複雑な場合は、これが必要になることがあります。{ ... }
' ' I/Oリダイレクトを使用することもできます。
{
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
ここにはセミコロンがないことに注意してください。必要ありません。シェルは時々素晴らしく邪悪です。中括弧のI/Oリダイレクトは、パイプ記号の後にコマンドをグループ化する必要がある場合に役立ちます。
some_command arg1 arg2 |
{
first sub-command
second command
for i in $some_list
do
...something with $i...
done
} >$outfile 2>$errfile