[OT] run command via ssh - problem

Bryn M. Reeves bmr at redhat.com
Thu Nov 5 11:13:24 UTC 2009


On 11/04/2009 11:39 PM, Rick Stevens wrote:
> Bryn M. Reeves wrote:
>> On Wed, 2009-11-04 at 13:32 +0000, Dan Track wrote:
>>> Hi Bryn,
>>>
>>> Many thanks. I tried hostname -s but I keep getting the following:
>>>
>>> hostname: Host name lookup failure
>>
>> Possibly your resolver on the servers is not configured to search its
>> own local domain. Add a line like this to /etc/resolv.conf:
>>
>> search mylocaldomain.com
>>
>> Or, if you configure the resolver via dhcp add a directive on the server
>> to pass this over to clients.
>>
>>> 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
>>
>> You need to use single quotes instead of double quotes - see the rules
>> in the bash man page about quote expansion. A single quoted string is
>> not subject to any expansion by the shell on the client machine but a
>> double quoted string will be expanded on the client before the ssh
>> command is executed.
>>
>> $ ssh abox 'DNSNAME=$(basename $(hostname));echo $DNSNAME'
>> abox.example.com
>>
>> I still don't think that basename will do what you want here...
>
> It's not quotes, it's the backtick. Don't backtick the command, just

Yes, they are quotes (in my example above). They are there to disable 
shell expansion on the client machine and to ensure the whole command 
line is sent to the remote system unchanged.

> for i in server1 server2; do ssh root@$i hostname; done

Read the whole thread :)

This was suggested way back but the OP wants to do the nested shell 
expansion thing.

Regards,
Bryn.




More information about the fedora-list mailing list