Solved

Complex ksh variable

Posted on 2002-05-20
26
861 Views
Last Modified: 2008-03-10
Hello Experts,

  Here is the question:

   This is works:

     HOSTNAME=/usr/bin/hostname
     $HOSTNAME - output: "demohost"

   This is not:

     HOST_DOMAIN="(/usr/bin/hostname | xargs /usr/sbin/nslookup | grep Name | awk '{print \$2}')"

    $HOST_DOMAIN - output: "ksh: (/usr/bin/hostname:  not found"

   At the same time, this runs okay:

(/usr/bin/hostname | xargs /usr/sbin/nslookup | grep Name | awk '{print $2}')

 Output: demohost.domain.com

 Please, help me with the right way of asigning $HOST_DOMAIN, so it will return <hostname>.<domain>, i.e.

  $HOST_DOMAIN, output: demohost.domain.com

Thanks,

 rwarsh



   
0
Comment
Question by:Ron Warshawsky
  • 7
  • 5
  • 3
  • +5
26 Comments
 
LVL 6

Expert Comment

by:bira
ID: 7022619
HOST_DOMAIN=`(/usr/bin/hostname | xargs /usr/sbin/nslookup | grep Name | awk '{print $2}')
`
0
 
LVL 3

Author Comment

by:Ron Warshawsky
ID: 7022656
to Bira:

 Did you test it before sumbitting? Your statement does not works.

rwarhs

0
 
LVL 6

Expert Comment

by:bira
ID: 7022670
what is the result if you fire   echo $HOST_DOMAIN   ?

what kind of unix do you have ?
0
Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

 
LVL 6

Expert Comment

by:bira
ID: 7022735
Try this way:
HOST_DOMAIN=`/usr/bin/hostname | xargs /usr/sbin/nslookup | grep Name | awk '{print $2}'`

 echo $HOST_DOMAIN

  What does it show ?
0
 
LVL 3

Author Comment

by:Ron Warshawsky
ID: 7022755
These are the results:

$ HOST_DOMAIN="(/usr/bin/hostname | xargs /usr/sbin/nslookup | grep Name | awk '{print \$2}')"
$ echo $HOST_DOMAIN
(/usr/bin/hostname | xargs /usr/sbin/nslookup | grep Name | awk '{print $2}')
$ $HOST_DOMAIN
ksh: (/usr/bin/hostname:  not found

However,

This command will provide ok result:

$ (/usr/bin/hostname | xargs /usr/sbin/nslookup | grep Name | awk '{print $2}')



0
 
LVL 38

Expert Comment

by:yuzh
ID: 7022950
use:
  HOST_DOMAIN=`nslookup \`hostname\` | grep Name
| awk '{print $2}'`

  echo $HOST_DOMAIN

0
 
LVL 3

Author Comment

by:Ron Warshawsky
ID: 7022971

 To yuzh:

  Your command will provide with the immediate computation of the HOST_DOMAN. Please, see the original question above:

 The point is to be able to have a set of commands in a text variable and beeing able to use it like:

 local_host = $($HOST_DOMAIN) or

 remsh <hostname> -l <user> $HOST_DOMAIN,

 where HOST_DOMAIN is set of the commands, not a result

 Thanks,

  rwarsh




0
 
LVL 38

Expert Comment

by:yuzh
ID: 7023047
Ok , you want to store the set of commands to a var, here's
the one:

HOST_DOMAIN="nslookup \`hostname\` | grep Name | awk '{print \$2}'"

to verify what's in the var, use

echo $HOST_DOMAIN

to run the command:

use: eval $HOST_DOMAIN

Cheers!


0
 
LVL 3

Author Comment

by:Ron Warshawsky
ID: 7023519

 Hello yuzh,

  Unfortunately, I am changing existing system(very big), written in ksh and I can not use "eval".

 The change suppose to substitute statement

 HOSTNAME=/usr/bin/hostname

 with the working version of

 HOSTNAME=="nslookup \`hostname\` | grep Name | awk '{print \$2}'"

 This variable called later in different parts of code, using $($HOSTNAME) and in rsh call.

Thanks,

 rwarsh

0
 
LVL 84

Expert Comment

by:ozo
ID: 7023532
HOST_DOMAIN=`/usr/bin/hostname | xargs /usr/sbin/nslookup | grep Name | awk '{print $2}'`
0
 
LVL 3

Author Comment

by:Ron Warshawsky
ID: 7024516

 to ozo:

   Please, see my comment on bira's suggestion. Your statement is the same one.

rwarsh
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7025363
HOST_DOMAIN='/usr/sbin/nslookup '"'"'`'"'"'/usr/bin/hostname'"'"'`'"'"'|awk '"'"'/^Name/{print $2}'"'"

rsh host $HOST_DOMAIN
0
 
LVL 3

Author Comment

by:Ron Warshawsky
ID: 7025382

 To ahoffman,

  Please, try it on command line, like

    $($HOST_DOMAIN) - it will fail.

  Actually, even simple example will fail,

  i.e.

   Works:
    >a="ls -al"
    >$a
   
   Does not works:

   >a="(ls -al | grep .txt)"
   >$a
    ksh: (ls:  not found - error.



   
   
   
   
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7025509
I did not use parantheses, and not $($HOST_DOMAIN)
my simple example works for me (but it is pdksh on Linux, which should not be a problem here)
0
 
LVL 3

Author Comment

by:Ron Warshawsky
ID: 7025523

To ahoffman:

  My UNIX is SunOs 5.8

rwarsh
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7025550
HOST_DOMAIN='/usr/sbin/nslookup `/usr/bin/hostname`|awk '"'"'/^Name/{print $2}'"'"
rsh host $HOST_DOMAIN
0
 

Expert Comment

by:DigitalGuy
ID: 7801973
Try this.  It works on Solaris 5.6.

HOSTNAME="`hostname`.`cat /etc/resolv.conf | awk '{if ($1 == "domain") print $2}'`"

You can then access using $HOSTNAME

0
 
LVL 20

Expert Comment

by:jmcg
ID: 10329586
No comment has been added lately, so it's time to clean up this TA.
I will leave the following recommendation for this question in the Cleanup topic area:

PAQ with points refunded

Please leave any comments here within the next four days.
PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

jmcg
EE Cleanup Volunteer
0
 
LVL 20

Expert Comment

by:jmcg
ID: 10329595
The experts seemed to have a hard time seeing what rwarsh was trying to do. They kept on answering a different question than he was asking.
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 10332125
may suggestion (http:#7025363) works in ksh
no reason for a refund
0
 
LVL 20

Expert Comment

by:jmcg
ID: 10332673
I'm not sure why rwarsh rejected your solution, since I'm not entirely sure I understand what he was asking for myself. The moderator may see things differently than I did.
0
 
LVL 1

Expert Comment

by:Computer101
ID: 10361323
PAQed, with points refunded (100)

Computer101
E-E Admin
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 10361427
Computer101, would you please explain your choice
0
 
LVL 1

Accepted Solution

by:
Computer101 earned 0 total points
ID: 10482583
PAQed - no points refunded (of 100)

Computer101
E-E Admin
0

Featured Post

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

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

I have been running these systems for a few years now and I am just very happy with them.   I just wanted to share the manual that I have created for upgrades and other things.  Oooh yes! FreeBSD makes me happy (as a server), no maintenance and I al…
Why Shell Scripting? Shell scripting is a powerful method of accessing UNIX systems and it is very flexible. Shell scripts are required when we want to execute a sequence of commands in Unix flavored operating systems. “Shell” is the command line i…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.

813 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

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now