Re: [OT] run command via ssh - problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dan Track wrote:
On Wed, Nov 4, 2009 at 1:33 PM, Bryn M. Reeves <bmr@xxxxxxxxxx> wrote:
On Wed, 2009-11-04 at 13:13 +0000, Dan Track wrote:
On Wed, Nov 4, 2009 at 1:10 PM, Dan Track <dan.track@xxxxxxxxx> wrote:
Hi,

I'm running a command like this:

for i in server1 server2;do ssh root@$i "`hostname`";done.

However the hostname command always outputs the hostname of the server
that the above command is run from. I'd like to know how to run this
hostname command so that it actually runs on server 1, server2 etc..

Thanks
Dan

Sorry just to add the actual script was like this:

for i in server1 server2;do ssh root@$i "DNSNAME=\"basename
\`hostname\`\";echo $DNSNAME";done
Not sure why you're setting a variable here but to have "basename" run
as a command and assign the output to DNSNAME you need to have basename
inside a pair of backticks too.

You'll then hit another problem because you want to have nested
backticks (one pair for basename and another for hostname). Bash
supports '$()' as an alternative to backticks that does allow nesting -
writing $(hostname) is equivalent to `hostname` and allows you to write
$(basename $(hostname)).

I'm not sure basename is going to do what you want here though - are you
looking for the short host name or the domain name? The basename command
separates components of a path based on the '/' (or whatever the system
defined path separator is). E.g.:

$ DNS=$(basename $(hostname))
$ echo $DNS
breeves.fab.redhat.com

If you just want the short hostname you can pass -s to hostname:

$ ssh pe1950-1.gsslab hostname -s
pe1950-1

Or the domain with -d:

$ ssh pe1950-1.gsslab hostname -d
gsslab.fab.redhat.com

Have a look at the man page for hostname for more options.

Regards,
Bryn.

Hi Bryn,

Many thanks. I tried hostname -s but I keep getting the following:

hostname: Host name lookup failure

This may be because the hostname's are short already e.g just
"server1" instead of "server1.example.com"

I've updated teh script to your recommendations but I still get the
local hosts hostname in teh output instead of the remote servers
hostname. Any other thoughts?

I now run the following:

for i in server1 server2;do ssh root@$i "DNSNAME=$(basename
$(hostname)$);echo $DNSNAME";done
             A        A
             |        |
       what is that?  |
                      |
          need a backslash before the $

Thanks
Dan



--
Bill Davidsen <davidsen@xxxxxxx>
  "We have more to fear from the bungling of the incompetent than from
the machinations of the wicked."  - from Slashdot

--
fedora-list mailing list
fedora-list@xxxxxxxxxx
To unsubscribe: https://www.redhat.com/mailman/listinfo/fedora-list
Guidelines: http://fedoraproject.org/wiki/Communicate/MailingListGuidelines

[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux