Globbing or not globbing


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Globbing or not globbing
# 1  
Old 10-01-2012
Question Globbing or not globbing

Hi guys,

Here is a simple script. It writes the current time to specific files in a directory.
The arguments are the names of the files to write the date to (without path nor extension).
Code:
root:~# cat /usr/local/bin/dummy.sh
#!/bin/sh -e
for file in $@; do
    date >> /var/lib/$file.dat
done

The command
Code:
root:~# dummy.sh a1 a2 a3

will write the current time to
Code:
/var/lib/a1.dat
/var/lib/a2.dat
/var/lib/a3.dat

I'd like to allow wildcards in the arguments.
But the command
Code:
root:~# dummy.sh a*

will try to write the current time to files in /var/lib/ named after files in /root/a* plus the extension .dat.

To achieve my goal, I'd need globbing to be disabled in
Code:
for file in $@

but enabled in
Code:
date >> /var/lib/$file.dat

How's that doable?

Best regards
Santiago
# 2  
Old 10-01-2012
If you assume that /var/lib/a*.dat will expand to something like /var/lib/ab.dat /var/lib/ac.dat, your command line will become date >> /var/lib/ab.dat /var/lib/ac.dat and will fail. Only the first word after >> will be considered as the file-name to be appended to and the rest of the file-names will be considered as arguments to date.

Last edited by elixir_sinari; 10-01-2012 at 10:16 AM..
# 3  
Old 10-01-2012
You will need to call the script like so
Code:
dummy.sh a\*.dat

because the glob expansion happens in the shell, not the script Smilie
# 4  
Old 10-01-2012
You can try something like this dummy.sh 'a*'

--ahamed
# 5  
Old 10-01-2012
That's right elixir_sinari.
Please forgive my mistake and considere the following code :
Code:
root:~# cat /usr/local/bin/dummy.sh
#!/bin/sh -e
for arg in $@; do                       # disable globbing
    for file in /var/lib/$arg.dat; do   # enable globbing
        date >> $file
    done
done

Sorry Skrynesaver and ahamed101. Escaping the wildcard doesn't change anything.

Last edited by chebarbudo; 10-01-2012 at 10:27 AM..
# 6  
Old 10-01-2012
Code:
#!/bin/sh -e
cd /var/lib
for arg in $@; do
    for file in /var/lib/$arg.dat; do  
        date >> $file
    done
done

then call it this way:
sh -f -c "./dummy.sh a*"
--
Bye

Last edited by Lem; 10-01-2012 at 10:34 AM..
This User Gave Thanks to Lem For This Post:
# 7  
Old 10-01-2012
Hey Lem,
Thanks for your help.
That still leaves me with one problem.
If run several times, I'll end up with files named a1.dat.dat.dat.dat.
Login or Register to Ask a Question

Previous Thread | Next Thread

6 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

File globbing order

Hi , I'm facing a different behaviour with one of my shell script for last few days. It was working good before that. here is my code for the script FileRemove.sh #get the file name# file1=$1 file2=$2 rm $file1 # delete the old file mv $file2 <target path> #move the new file to the target... (5 Replies)
Discussion started by: poova
5 Replies

2. Shell Programming and Scripting

Negation in Bash Globbing

$ ls -1 a.1 b.1 x_a.1 x_b.1 $ ls -1 * b.1 x_a.1 x_b.1 $ ls -1 ** a.1 b.1 x_a.1 x_b.1The last result is not as expected. Why? Thanks. (2 Replies)
Discussion started by: carloszhang
2 Replies

3. UNIX for Dummies Questions & Answers

File globbing questions

hi guys, jus some file globbing questions sed "s/^.*on//" what does the full stop and asterisk means? i onli know that ^ means inverse or not (1 Reply)
Discussion started by: ment0smintz
1 Replies

4. Shell Programming and Scripting

globbing, $# is too high after wildcard expansion in bash script

How can I pass in an argument such as "*.k" to a bash script without having to double-quote *.k and not having *.k `glob` to match all files in the pattern? I tried using noglob in my script but this didn't work the way I thought it would.. expansion is still occuring, $# is higher than I... (3 Replies)
Discussion started by: zoo591
3 Replies

5. Shell Programming and Scripting

Globbing slash Wildcarding Question

I am on HP-UX and I am trying to come up with a method to call in a list of files named like so. filename020107.dat filename020207.dat filename020307.dat Obviously I can list them ls them like so, ls filename*.dat. In case you did not notice the number is a date and I was hoping to match... (4 Replies)
Discussion started by: scotbuff
4 Replies

6. Shell Programming and Scripting

awk / bash globbing question

I would like to process a list of files matching: GPS*\.xyz with an awk script. I would then like to output the files to GPS*\.xyz.out (e.g. the same file name appended with .out). Something like: awk '{if(NR==1) {offset=-$1}; $1=$1+offset; print }' GPS*.xyz this does exactly what I want EXCEPT... (3 Replies)
Discussion started by: franzke
3 Replies
Login or Register to Ask a Question