(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中:

Mapenv=new HashMap();

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!\n");

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

26         {

27             if(s[i]=='=')

28             {

29                 envVariable[i]='\0';

30                 break;

31             }

32             envVariable[i]=s[i];

33         }

34         for (j=i+1;j

35         {

36             envValue[j-i-1]=s[j];

37         }

38         envValue[j-i-1]='\0';

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  ”$TMPDIR

env>envcontent

scp  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换成要执行的远程程序就好了~

远程调用linux,Linux 通过Shell远程调用相关推荐

  1. Linux 实操———— Shell 远程执行命令

    引言 目前,开发人员的部署方式是,将项目打包(Maven 打包) 然后将 生成的 jar 包等文件,通过Xshell 等终端工具手动传输到远程服务器上,然后再通过在终端执行远程服务器上的 shell ...

  2. Linux高阶—shell远程批处理脚本(七)

    目录 介绍:简单.实用的批处理脚本 案例一:批量下发远程执行命令 案例二:批量下发文件 介绍:实用.简单的批处理脚本 expect是处理交互式命令的命令,它可以将类似ssh登录,ftp登录等等需要交互 ...

  3. linux 环境 crontab+shell+sqlplus 调用oracle 存储过程实现数据同步

    需求背景:与第三方厂商合作使用sql_loadv1.0进行数据加载,他们负责推数,我拉数. 执行流程: 1.ODS推数-------->sftp服务器 2.拉数-------->sftp服 ...

  4. Linux中,shell脚本调用java程序模板

    运行某个shell的时候检测这个shell当前是否运行,如果正在运行,退出,否则,开始运行. #!/bin/bash cd /a/b/c/bin Channel=$1 BatchSize=80000 ...

  5. Linux 中启用 Shell 脚本的调试模式

    shell 脚本调试系列 Linux 中启用 Shell 脚本的调试模式 在 Shell 脚本中执行语法检查调试模式 在 Shell 脚本中跟踪调试命令的执行 概述 脚本是存储在一个文件的一系列命令. ...

  6. 如何在 Linux 中启用 Shell 脚本的调试模式

    脚本是存储在一个文件的一系列命令.在终端上输入一个个命令,按顺序执行的方法太弱了,使用脚本,系统中的用户可以在一个文件中存储所有命令,反复调用该文件多次重新执行命令. 在学习脚本或写脚本的初期阶段,我 ...

  7. 大神教你如何在 Linux 中启用 Shell 脚本的调试模式

    导读 脚本是存储在一个文件的一系列命令.在终端上输入一个个命令,按顺序执行的方法太弱了,使用脚本,系统中的用户可以在一个文件中存储所有命令,反复调用该文件多次重新执行命令. 在学习脚本或写脚本的初期阶 ...

  8. 【shell】Linux Shell远程执行命令

    目录 shell远程执行 前提条件: 对于简单的命令: 对于脚本的方式: SSH命令格式 主要参数说明 ssh控制远程主机,远程执行命令步骤 准备工作 基于公私钥认证远程登录可能存在的不足 ssh 执 ...

  9. Linux中的Shell用SSH自动登录远程服务器后执行命令并自动退出

    目录 [隐藏] 1 SSH命令格式 2 主要参数说明 3 ssh控制远程主机,远程执行命令步骤 4 准备工作 5 基于公私钥认证远程登录可能存在的不足 6 ssh 执行远程命令格式 6.1 打开远程s ...

  10. 执行远程linux命令,linux shell 远程执行命令

    经常要部署多台服务器上面的应用,如果一个个机器的登录太麻烦. 所有就想到编写一个脚本来部署不同的服务器 前提条件: 配置ssh免登陆 如果不会的请参加我的另外一篇文章 http://blog.csdn ...

最新文章

  1. TMB计算的小工具-calculate_TMB.exe
  2. boost::mpi模块在序列化数据上测试 any_source
  3. python从入门到实践 第12章 武装飞船 之 调整飞船的速度程序实践
  4. 《JavaScript高级程序设计》笔记:JavaScript简介(一)
  5. 《剑指offer》栈的压入、弹出序列
  6. ImportError: libpq.so.5: cannot open shared object file: No such file or directory
  7. javax.validation.ValidationException: Unable to find a default provider
  8. 虚拟dom添加虚拟dom_虚拟DOM缓慢。 认识记忆化的DOM
  9. matlab 写excel 慢_吐槽一下MATLAB的workspace
  10. 计算机组成原理r型指令logisim实现_第一章 计算机体系结构
  11. 带你认识不一样的Stream,Java8就该这么玩!
  12. 计算机c盘装什么,电脑只有一个C盘!怎么为电脑重装系统?
  13. 机器学习笔记——14 矩阵谱分解与奇异值分解及其背后的线性算子理论 (实战项目:利用SVD进行图像压缩)
  14. prometheus安装与开启并设置开机自启
  15. HTML经典绝对定位图片
  16. AcWing 487. 金明的预算方案 (有依赖关系的背包问题)
  17. saas智能营销云平台是什么 大数据营销智能平台 - whale 帷幄
  18. win7 wifi共享设置
  19. 公民身份证号码的编排规则
  20. elo匹配算法c语言,ELO算法教程

热门文章

  1. nas918+支持的cpu_PC硬件与外设 篇六十一:这次稳了吧?细节设计提升的九州风神AS500 Plus 风冷散热器搭配苏妈3800X实测_CPU散热器...
  2. 你最擅长的领域是什么
  3. 【微服务】Java模拟实现dubbo框架
  4. Android加载自定义字体出错,Android设置自定义字体的解决方案
  5. java毕业设计选题推荐 SpringBoot大学生健康档案系统 大学生健康服务平台 高校学生体质检测系统
  6. coot无法打开mtz文件
  7. WPF利用Canvas实现任意分辨率的全屏缩放
  8. matlab ode45指令,matlab 中ode45的源代码如何看懂
  9. 《PYTHON3网络爬虫开发实践》——第六章 Ajax数据爬取
  10. 固件怎么下载和wifi配网