Prev: wget, forms, password, cookies
Next: Call for Paper The International Journal of Computer Science (IJCS)
From: PGK on 2 Mar 2010 08:15 Hi everyone, I'm trying to write a bash script which will cd into each directory in the current one; do something; then cd back out again. The problem I have is that some of the client's directories contain spaces. My best effort is below. function myecho { echo $1 } find ./*/ -maxdepth 0 -type d -print0 -exec echo {} \; find ./*/ -maxdepth 0 -type d -print0 -exec myecho {} \; With "echo" everything runs fine, but "myecho" gives multiple "No such file or directory" errors. Can anyone give some advice? Eventually I would replace myecho with something like doit: function doit { cd $1/src make cd - }
From: pk on 2 Mar 2010 08:25 PGK wrote: > Hi everyone, > > I'm trying to write a bash script which will cd into each directory in > the current one; do something; then cd back out again. The problem I > have is that some of the client's directories contain spaces. > > My best effort is below. > > function myecho { > echo $1 > } > > find ./*/ -maxdepth 0 -type d -print0 -exec echo {} \; > find ./*/ -maxdepth 0 -type d -print0 -exec myecho {} \; > > With "echo" everything runs fine, but "myecho" gives multiple "No such > file or directory" errors. Can anyone give some advice? > > Eventually I would replace myecho with something like doit: > > function doit { > cd $1/src > make > cd - > } You can't directly call a function in a -exec action, becuase it can't be exec()ed. So you can do something like find ... -exec sh -c 'do your stuff with "$1" here' sh {} \; quotes are important.
From: Ed Morton on 2 Mar 2010 08:25 On 3/2/2010 7:15 AM, PGK wrote: > Hi everyone, > > I'm trying to write a bash script which will cd into each directory in > the current one; do something; then cd back out again. The problem I > have is that some of the client's directories contain spaces. > > My best effort is below. > > function myecho { > echo $1 > } > > find ./*/ -maxdepth 0 -type d -print0 -exec echo {} \; > find ./*/ -maxdepth 0 -type d -print0 -exec myecho {} \; > > With "echo" everything runs fine, but "myecho" gives multiple "No such > file or directory" errors. Can anyone give some advice? > > Eventually I would replace myecho with something like doit: > > function doit { > cd $1/src > make > cd - > } First quote your variables (e.g. so $1 becomes "$1") then get back to us if you still have a problem. ALWAYS quote your variables unless you have a specific reason not to. Ed.
From: PGK on 2 Mar 2010 08:49 On 2 Mar, 13:25, pk <p...(a)pk.invalid> wrote: > PGK wrote: > > Hi everyone, > > > I'm trying to write a bash script which will cd into each directory in > > the current one; do something; then cd back out again. The problem I > > have is that some of the client's directories contain spaces. > > > My best effort is below. > > > function myecho { > > echo $1 > > } > > > find ./*/ -maxdepth 0 -type d -print0 -exec echo {} \; > > find ./*/ -maxdepth 0 -type d -print0 -exec myecho {} \; > > > With "echo" everything runs fine, but "myecho" gives multiple "No such > > file or directory" errors. Can anyone give some advice? > > > Eventually I would replace myecho with something like doit: > > > function doit { > > cd $1/src > > make > > cd - > > } > > You can't directly call a function in a -exec action, becuase it can't be > exec()ed. > > So you can do something like > > find ... -exec sh -c 'do your stuff with "$1" here' sh {} \; > > quotes are important. Ok, thanks. I tried: find ./*/ -maxdepth 0 -type d -print0 -exec sh -c myecho sh {} \; but I get the error sh: myecho: command not found
From: PGK on 2 Mar 2010 08:50 On 2 Mar, 13:25, Ed Morton <mortons...(a)gmail.com> wrote: > On 3/2/2010 7:15 AM, PGK wrote: > > > > > Hi everyone, > > > I'm trying to write a bash script which will cd into each directory in > > the current one; do something; then cd back out again. The problem I > > have is that some of the client's directories contain spaces. > > > My best effort is below. > > > function myecho { > > echo $1 > > } > > > find ./*/ -maxdepth 0 -type d -print0 -exec echo {} \; > > find ./*/ -maxdepth 0 -type d -print0 -exec myecho {} \; > > > With "echo" everything runs fine, but "myecho" gives multiple "No such > > file or directory" errors. Can anyone give some advice? > > > Eventually I would replace myecho with something like doit: > > > function doit { > > cd $1/src > > make > > cd - > > } > > First quote your variables (e.g. so $1 becomes "$1") then get back to us if you > still have a problem. ALWAYS quote your variables unless you have a specific > reason not to. > > Ed. I have tried it with "$1" but I get the same error messages. I will leave it as "$1" for now, thanks.
|
Next
|
Last
Pages: 1 2 3 Prev: wget, forms, password, cookies Next: Call for Paper The International Journal of Computer Science (IJCS) |