Solved

setting a UNIX environmental variable in a one-liner

Posted on 2004-04-23
8
461 Views
Last Modified: 2010-04-21

Hi

I am looking to set an environmental varibale in a one liner that I will present to the operating system from a program. I need to find the 32 bit CRC checksum of a file, the UNIX for this would be...

  cksum file.ext

Simple enough, except that this returns several columns of data, I know that I only need the first column which is the actuall checksum value so....

  echo `cksum file.ext ` | cut -d" " -f1

Will get the data I need. I then need to present this to a setenv command and this is where I am having trouble with the syntax, all of the following do not work....

  setenv MJMCKSUM `echo ``cksum file.ext ` | cut -d" " -f1``

  setenv MJMCKSUM `echo `cksum file.ext ` | cut -d" " -f1`

I thought either of these would substitute the inner command to the cksum value and then use this value to set the MJMCKSUM environmental variable. Is there something wrong with my syntax or is this a two step operation?

Thanks in advance

Mike

0
Comment
Question by:mikem22
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
8 Comments
 
LVL 11

Accepted Solution

by:
avizit earned 250 total points
ID: 10900685
setenv TVS `cksum file.ext | cut -d" " -f1`

seems to work on my cygwin system ..

AFAIK what is between the backquotes is executed and the result returned , so i guess you dont need the "echo"

try and check on your system

/abhijit/
0
 
LVL 6

Expert Comment

by:bira
ID: 10900800
setenv MJMCKSUM `cksum file.ext  | cut -d" " -f1`
0
 
LVL 3

Expert Comment

by:dtkerns
ID: 10901250
the `cmd` construct cannot be nested without \

as in:

echo `echo hello \`date\``

you can, however, nest this form:

$(cmd)

as in:

echo $(echo hello $(date))

but as pointed out above, nesting is not required for what you need
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 48

Expert Comment

by:Tintin
ID: 10914430
No need for the UUOE
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 10921328
setenv MJMCKSUM `cksum file.ext ` | awk '{print $1}'`

BTW, backticks can be nested, depends on the shell only
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 10966619
damn, ther is a typo in my last comment
setenv MJMCKSUM `cksum file.ext | awk '{print $1}'`
0
 
LVL 20

Expert Comment

by:Gns
ID: 10996076
Wellcome to "Le Grand Typo Club" Achim:-). Membership is free;-).

The question I'm asking myself here is _why_ would you want this?
The exported environment will go away with the _child process executing the commands_ so your "controlling program" will never be able to "see" the variable anyway. So if you run a oneline system() or similar, your program (as a parent) or any sibling to that system() will not see it.
If you need the parent to be able to read the value, you'd probably most easily accomplish this by writing the result to a file in the system("cksum file.ext | awk '{print $1}'>/tmp/tempfile") ... and reading that file in the parent. Cumbersome and ugly:-).
This behaviour is a property of unix, not any specific language.

Std disclaimer: I might have missunderstood your intentions entirely... and look forward to any input in that direction:-).

-- Glenn
0
 
LVL 20

Expert Comment

by:Gns
ID: 10996096
Obviously a case of me overinterpreting the phrasing of the question:-)... Not to mention the huge pause between starting to write a comment and actually clicking submit:-):-).

-- Glenn
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
AIX Server 10 91
IBM flash storage 840 15 70
Sparc Solaris hangs without crash dump & no events from messages 3 93
AIX 5.x set up arrow to recall 11 64
Let's say you need to move the data of a file system from one partition to another. This generally involves dismounting the file system, backing it up to tapes, and restoring it to a new partition. You may also copy the file system from one place to…
A metadevice consists of one or more devices (slices). It can be expanded by adding slices. Then, it can be grown to fill a larger space while the file system is in use. However, not all UNIX file systems (UFS) can be expanded this way. The conca…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:
Learn how to navigate the file tree with the shell. Use pwd to print the current working directory: Use ls to list a directory's contents: Use cd to change to a new directory: Use wildcards instead of typing out long directory names: Use ../ to move…

733 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question