LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   Confused over a BASH command (https://www.linuxquestions.org/questions/linux-newbie-8/confused-over-a-bash-command-598980/)

Couling 11-12-2007 04:22 AM

Confused over a BASH command
 
I've done a fair amount of C and java programming on platforms other than linux, so I thought I'd have no trouble with variables in BASH.

However I've been confused by seeing this command:
Code:

CC="gcc -B/usr/bin/" ../binutils-2.17/configure \
--prefix=/tools --disable-nls --disable-werror

To my untrained eye this should just assign a string to the variable CC. What it actually does is configure binutils.

Is anyone able to give me a little detail on why this carries out a command? Anything about what this is actually doing would be helpful.

Thanks for your time.

druuna 11-12-2007 04:30 AM

Hi,

There are 2 commands present:

1) CC="gcc -B/usr/bin/", This forces gcc to prefer the linker from the host in /usr/bin. This is necessary on some hosts where the new ld built here is not compatible with the host's gcc. (boldly copied from the LFS 6.3, 5.3. Binutils-2.17 - Pass 1 page....).

and

2) ../binutils-2.17/configure --prefix=/tools --disable-nls --disable-werror, which is the configure command (with 3 options).

Hope this helps.

colucix 11-12-2007 05:37 AM

Quote:

Originally Posted by Couling (Post 2956014)
Code:

CC="gcc -B/usr/bin/" ../binutils-2.17/configure \
--prefix=/tools --disable-nls --disable-werror

To my untrained eye this should just assign a string to the variable CC. What it actually does is configure binutils.

Here the syntax is the same as the env command
Code:

env CC="gcc -B/usr/bin/" ../binutils-2.17/configure \
--prefix=/tools --disable-nls --disable-werror

you can omit env and the result is the same: change or create an enviromental variable which will be assigned for the duration of the script or command. See man env for details.

Couling 11-12-2007 05:39 AM

That makes a little more sense.

How does the syntax indicate 2 commands?
Is it the fact that "gcc -B/usr/bin/" is quoted or something else?

Couling 11-12-2007 05:44 AM

Quote:

Originally Posted by colucix (Post 2956053)
Here the syntax is the same as the env command

Ah.

The equivalent would have been to use "export CC=...", followed by the configure command?

although this would have perminantly changed CC (atleast until I closed the command prompt)

colucix 11-12-2007 05:51 AM

Quote:

Originally Posted by Couling (Post 2956062)
The equivalent would have been to use "export CC=...", followed by the configure command?

No. Not export, but env. You are right, if using export you permanently set an environment variable until you close the shell or issue an unset command. Instead, using env or the syntax
Code:

NAME=VALUE [ COMMAND [ARG] ... ]
you can set the value of NAME just for the execution of the command.

druuna 11-12-2007 06:08 AM

Hi,

You've been answering your own questions ;)

Just to confirm: you can set the value of NAME just for the execution of the command. is correct.

I'm not sure if you are trying to set up LFS, but take a look at the chapter that follows binutils (GCC-4.1.2 - Pass 1), it shows that CC='.....' is set again.

onebuck 11-12-2007 08:18 AM

Quote:

Originally Posted by Couling (Post 2956014)
I've done a fair amount of C and java programming on platforms other than linux, so I thought I'd have no trouble with variables in BASH.

However I've been confused by seeing this command:
Code:

CC="gcc -B/usr/bin/" ../binutils-2.17/configure \
--prefix=/tools --disable-nls --disable-werror

To my untrained eye this should just assign a string to the variable CC. What it actually does is configure binutils.

Is anyone able to give me a little detail on why this carries out a command? Anything about what this is actually doing would be helpful.

Thanks for your time.

Hi,

Several posts have given you some good advice. I would suggest that you look at the Advanced Bash-Scripting Guide or Learning the Shell. You could also look at the Tutorials section of 'Slackware-Links' for other useful links.


All times are GMT -5. The time now is 03:46 AM.