linux - "For" loop in bash script only run once -


the script goal simple.

i have many directory contains captured traffic files. want run command each directory. came script. don't know why script run first match.

#!/bin/bash # collect throughput group of directory containing capture files # group of directory can specify pattern # usage: ./collectthroughputlist [regex] #       [regex] name pattern of group of directory  dir in $( ls -d $1 );    if test -d "$dir";        echo collecting throughputs directory: "$dir"        ( sh collectthroughput.sh $dir > $dir.txt )    fi done    echo done\! 

i try with:

for dir in $1; 

or

for dir in `ls -d $1`; 

or

for dir in $( ls -d "$1" ); 

or

for dir in $( ls -d $1 ); 

but result same. loop runs 1 time.

finally found 1 , did tricks work. however, know why first script doesn't work.

find *delay50ms* -type d -exec bash -c "cd '{}' && echo enter '{}' && ../collectthroughput.sh ../'{}' > ../'{}'.txt" \; 

"*delay*" directory pattern name want run command with. pointing out issues.

problem

most problem encountering due fact trying use kind of pattern * argument script.

running like:

my_script * 

what's happening here is, shell expand * prior calling script. after word splitting has been performed $1 in script reference first entry returned ls.

example

given following directory layout:

 directory_a  directory_b  directory_c 

calling my_script * result in:

my_script directory_a  directory_b directory_c 

being called loop iterating on $(ls -d directory_a) in fact nothing else directory_a alone.

solution

to have program run $1=* have escape * prior calling script.

try running:

my_script \* 

to see intended then. way $1 in script contain * instead of directory_a way wanted script work.


Comments

Popular posts from this blog

monitor web browser programmatically in Android? -

Shrink a YouTube video to responsive width -

wpf - PdfWriter.GetInstance throws System.NullReferenceException -