Welcome 微信登录

首页 / 操作系统 / Linux / Linux 通过Shell远程调用

(1)Linux如何通过命令行进行远程调用?通过google和百度,终于让我找到一个简单的方法,其实一条语句就好:$ssh  ip  “command”或者是$ssh  ip  ‘ command‘例如: ssh  100.100.100.100  “mkdir   -p   /home/zhangliuhang/zz/zz/zz”(2)在远程调用中一个个人认为很重要的问题是环境变量怎么传过去?我们知道export的作用域是后面的shell子进程,当前shell进行export设置好环境变量后在次重启shell时,原先通过export设置的环境变量会被清除。除非将export语句写在特殊的文件中。例如 .bash_profile或者.bashrc文件中。      那么我们在启动远程进程时该如何将当前进程的env传过去给远程进程使用?我们可以这么做:   $ssh 100.100.100.100  “export ZZZ=100;echo $ZZZ”但是当我们需要传递整个env时,并且要传递的env中存在诡异的环境变量名的时候,这种做法就行不通了。。。我们知道使用export时,环境变量名具有特殊要求,比如对于如下情况会报错$export  java.tmp.dir=/home/zhangliuhang/tmp因为‘java.tmp.dir’是一个非法的变量名,也许你会问这个非法的变量名怎么可能出现在env中。。。恩。。。通过java或者c语言程序是可以的。比如:Java中:      Map<String,String>env=new HashMap<String,String>();      env.put(“java.tmp.dir”,”/home/zhangliuhang/tmp”)      ProcessBuilder builder=new                    ProcessBuilder(“bash”,”/home/zhangliuhang/program”);      Builder.environment().putAll(env);      Builder.start(); C语言中:     #include “stdio.h”     #include “stdlib.h”     Int main (int argc,char* args[])        {              setenv(“java.tmp.dir”,”/zhangliuhang/tmp”,1);        system(args[1]);        return 0;        } 回到主题上,我们可以怎么做呢?我的具体做法是:在当前目录下写一个c语言的小程序setenv.cc,代码如下:      1 #include "stdio.h"      2 #include "stdlib.h"      3 #include "string.h"      4       5 int main(int argc,char* args[])      6 {      7     FILE *fp;      8     char s[200];      9     char envVariable[200];     10     char envValue[200];     11     int i,j,length;     12      13     if((fp=fopen(args[1],"r"))==NULL)     14     {     15         printf("file can"t open! ");     16         return 0;     17     }     18      19     while (!feof(fp))     20     {     21         fgets(s,200,fp);     22      23         //split the chars     24         length=strlen(s);     25         for(i=0;i<length;i++)     26         {     27             if(s[i]=="=")     28             {     29                 envVariable[i]="";     30                 break;     31             }     32             envVariable[i]=s[i];     33         }     34         for (j=i+1;j<length;j++)     35         {     36             envValue[j-i-1]=s[j];     37         }     38         envValue[j-i-1]="";     39      40         setenv(envVariable,envValue,1);     41     }     42      43     fclose(fp);     44      45     system(args[2]);     46      47     return 0;     48 } 编译成setenv可执行程序 同时写了一个脚本RemoteComputing.sh:ssh 100.100.100.100  “mkdir  -p  ”$TMPDIRenv>envcontentscp  envcontent  100.100.100.100:$TMPDIR/scp  ./setenv     100.100.100.100:$TMPDIR/bash  -c  “ssh 100.100.100.100  ‘$TMPDIR/setenv  $TMPDIR/envcontent  command’ ”ssh 100.100.100.100  “rm –rf  $TMPDIR”那么只要调用RemoteComputing .sh这个脚本并且将脚本中command换成要执行的远程程序就好了~CentOS下NTP安装配置Ubuntu也能用谷歌音乐啦相关资讯      Linux Shell 
  • Linux基础知识:shell基础命令  (今 10:39)
  • Linux系统监控shell脚本  (04月09日)
  • Linux shell脚本编程  (03月01日)
  • Linux shell数组  (07月26日)
  • Linux Shell实现批量关闭局域网中  (03月10日)
  • Linux系统入门教程:如何知道当前  (11/27/2015 08:36:09)
本文评论 查看全部评论 (0)
表情: 姓名: 字数