quoting hell - help needed!!


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting quoting hell - help needed!!
# 1  
Old 01-16-2012
quoting hell - help needed!!

I am writing a bash script to automate the installation of web environment on a base install of Fedora. And I'm at the limit of my last nerve and my bash skills. My brain is screaming at me: "Give up and use perl", but I am trying to stick to bash since the script will modify the perl environment as it runs.

My challenge, or at least my current one, is illustrated in the following code:

Code:
function exec_cmd {
        # code removed for sanity checking and loging
        local CMD="$1"
        local OUT
        OUT=`$CMD >> $LOG 2>&1`
        # code removed for logging and tracking
        return 0
}
 
for i in Xfce 'Development Libraries' 'Development Tools' 
         'MySQL Database' 'Perl Development' 'XFCE Software Development'
do
        CMD="$YUM -y groupinstall $i"
        exec_cmd "$CMD"
done

The code works fine on the first interation through the for loop since Xfce does not contain a space; however, when it reaches 'Development Libraries' and the subsequent multi-word itmes in the list, by the time it gets to executing in exec_sum, 'Development Libraries' is parsed as two separate words. Grrrr

I have tried every quoting approach that I can think of to make this work and all fail, one way or another.

Any help that you can lend will be greatly appreciated!!

lbe
# 2  
Old 01-16-2012
Do you really need a separate function for exec_cmd?
I would write it like this:

Code:
_packages=(
  Xfce
  'Development Libraries'
  'Development Tools'
  'MySQL Database'
  'Perl Development'
  'XFCE Software Development'
  ) 
 
for p in "${_packages[@]}"; do 
        "$YUM" -y groupinstall "$p" >> "$LOG" 2>&1
done

# 3  
Old 01-16-2012
Yes, the function handles error tracking and checkpointing for restarts as well as just logging.
# 4  
Old 01-16-2012
See if this works:

Code:
for i in Xfce 'Development Libraries' 'Development Tools' \
         'MySQL Database' 'Perl Development' 'XFCE Software Development'
  do
  CMD="$YUM -y groupinstall \"$i\""
  exec_cmd "$CMD"
done


Last edited by Scrutinizer; 01-16-2012 at 02:56 PM..
# 5  
Old 01-16-2012
Sorry, no go either. Once function exec_cum a multi-word gets parsed to '"Development' 'Libraries"'

---------- Post updated at 01:42 PM ---------- Previous update was at 01:03 PM ----------

Thanks to all of you who are trying to help.

The following is a small test that you can run on your system, as long as it has yum installed, to replicate my problem and test your recommendation. Instead of performing a groupinstall, it will just list information about the group when working Smilie

Code:
#!/bin/bash -x
function exec_cmd {
        local CMD="$1"
        local OUT
        OUT=`$CMD`
        return 0
}
 
for i in Xfce 'Development Libraries' 'Development Tools' 
do
        CMD="yum groupinfo \"$i\""
        exec_cmd "$CMD"
done

Thanks again!
# 6  
Old 01-16-2012
Try:
Code:
OUT=$(eval "$CMD")

# 7  
Old 01-16-2012
You sir, are a scholar and a gentleman!!! That works!!!

One last update - I formatted the multi-word items in the list as "'Development Tool'". That and the change recommended above was all it took

Last edited by lbe; 01-16-2012 at 04:54 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Quoting Characters

I have this data how do i add ' ' to them like '-AAL00L' , '-BBE4577' , 'ABC' -AAL00L -BBE4577 ABC (5 Replies)
Discussion started by: dinjo_jo
5 Replies

2. What is on Your Mind?

The Hell of colaboration in UNIX and Linux

I don't want to speak about the goods or bads of both kinds of Operating systems, I only want to share a little experience with you to comment it. I live in Spain and I have home some old unix systems, some of them that I want to sell or change for other things, like a pair of Sun Blade 2000... (0 Replies)
Discussion started by: Golfonauta
0 Replies

3. UNIX for Dummies Questions & Answers

Confussed as hell

:eek: (1 Reply)
Discussion started by: Kevinfine
1 Replies

4. Shell Programming and Scripting

hell & mathematics

I've been able to generate output based on the code scarfake provided me (thanks again man). A little background so everyone more or less knows whats going on: I needed code that would propagate a database with 100,000 entries, for capacity testing purposes, something like a stress test. ... (5 Replies)
Discussion started by: ogoy
5 Replies

5. Shell Programming and Scripting

hell and sqlite

Hi everyone, I have a requirement that requires me to fill an sqlite database with 100,000 entries (no duplicates). I will start out by giving the command that will insert the values necessary to populate the database: # sqlite /var/local/database/dblist "insert into list... (2 Replies)
Discussion started by: ogoy
2 Replies

6. What is on Your Mind?

Off-Topic Section? Holy hell, I've been gone a while...

Wowee, step off the bandwagon for a few months and it's amazing what can change. I'm still not sure if this is, in fact, but if it is, what made Neo change his mind about an OT thread? (7 Replies)
Discussion started by: Karma
7 Replies

7. UNIX for Dummies Questions & Answers

rpm hell!

I've just installed redhat 6.2 on one of my systems and am trying to install the gcc c compiler after downloading an rpm from the redhat site. The damn thing gives me: only major numbers <= 3 are supported by this version of RPM what do I do, it does the same with the latest rpm of php ... (7 Replies)
Discussion started by: knmwt15000
7 Replies

8. Programming

fork()ing hell!!

Hello I am having serious trouble with the fork command, i basically want to create 9 or 10 child processes and store their pid numbers in array while the children stay resident until i kill() them later , i cannot seem to control how many are made as they all seem to create their own children. ... (16 Replies)
Discussion started by: theultimatechuf
16 Replies
Login or Register to Ask a Question