runcmd和runscript

## 1 功能概述

runcmd/runscript:runcmd在一台或多台机器执行Network Shell命令(单个命令),而runscript执行的是脚本,二者使用方法一样。runcmd -e 参数后是要执行的命令,而runscript -e后面是要执行的Network Shell脚本

只是使用的话,看看下面的使用示例段就够了

## 2 使用示例

1 对远程主机执行命令:查看指定机器/etc路径下文件数

runcmd -h vm1 vm2 -d /etc -e ls -l | wc -l

2 为每台机器的输出加上标题,并在每行输出前都加上(hostname)

cloudexpress# runcmd -h lzx-clone1 10.200.108.92 -H "%h 网管机" -V -e whoami

lzx-clone1 网管机

(lzx-clone1) root

(lzx-clone1) Exit Code 

10.200.108.92 网管机

(10.200.108.92) root

(

cloudexpress#

3 在机器上执行脚本,脚本可以位于任何一台机器上

  a 脚本在某台远程机器上,这里是lzx-clone1

  runscript -h lzx-clone1 10.200.108.101  -e //lzx-clone1/root/test/a.sh -脚本参数

  b 脚本在执行命令的主机上

  runscript -h lzx-clone1 10.200.108.101  -e /root/test/a.sh -脚本参数

4 并发执行,设置并发量为2

runcmd -h rome athens paris london -p 2 -e ifconfig

## 3 语法

runcmd [-v -n -p n] [-H header] [-NH] [-s | -c] [-d directory] [-f file] [-h host1 ... hostn] [-e command1 ...commandn]

runscript [-v -n -p n] [-H header] [-NH] [-s | -c] [-d directory] [-f file] [-h host1 ... hostn] [-e command1 ...commandn]

## 4 说明

runcmd和runscript允许在多台机器执行相同的命令。不同点是:runcmd执行的是Network Shell命令,runscript执行的是Network Shell脚本。

根据你正在执行的操作,你可能想知道你正在哪个主机处理。为此,为每个sub-command设置了NSH_RUNCMD_HOST变量,此外NSH_RUNCMD_DIR环境变量也会设置来提示当前Network Shell path。这两个变量可以通过下面的命令打印出来

cloudexpress# runcmd -h lzx-clone1 10.200.108.101  -e sh -c 'echo $NSH_RUNCMD_HOST $NSH_RUNCMD_DIR'
==> lzx-clone1 <==
lzx-clone1 //lzx-clone1/
==> 10.200.108.101 <==
10.200.108.101 //10.200.108.101/
cloudexpress# 

## 5 命令参数

-c  在每台机器执行Network Shell命令,如果运行的是runcmd则会隐式的调用这个参数。

-d dirname       当在主机上执行命令时,可以通过该参数指定每台主机的起始目录,指定后如果运行pwd命令的话,则路径就是该参数指定的路径。当然如果不使用该参数,你可以在命令中进行指定。

-e cmd   使用该参数指定要执行的命令。这个参数必须是最后一个参数。所有在-e参数后的参数都会被认为是执行命令的一部分。

-f file

该参数把要执行命令的主机放在file中,格式是一行一条记录。一条记录可以是一个主机名,也可是是一个UNC name(包含网络路径和主机名的完整名称,如//athens/bin)。

-h host

该参数指定要执行命令的所有主机。主机之间使用空格分开。在-h参数后,所有随后的内容都被认为是主机名,除非runcmd/runscript遇到另外一个参数(以'-'开头的参数)。和-f指定主机名的参数一样,-h后面的主机名也可以是主机名或者是UNC name。

-H header

runcmd/runscript在输出结果中会有一个简单的标题。使你很容易区分不同主机的输出。默认的标题格式为"==> %h <==",其中的"%h"会被命令行中指定的主机信息替换。-H header   可以用来自定义标题,例如:-H "%h 网管机",则如下命令:

 runcmd -h lzx-clone1 -H "%h 网管机" -d /root/test -e pwd

#命令结果

lzx-clone1 网管机

//lzx-clone1/root/test

-n  该参数会使输出的标题不带回车(carriage return).

-NH  该参数会禁止所有标题的输出,即使你指定了-H header参数。

-p n

以并发方式执行命令,n是并发量。这可以显著提高运行速度,但由于是并发执行,所有输出顺序会被打乱,所以如果需要清晰的输出结果,那就不能使用并发。并发的原理是通过调用多个subshell的方式实现的

-v  把在每个主机实际执行的命令打印出来(如果是runscript的话会打印脚本名,但不是输出脚本内容)

-V  在每行输出前面都加上"(hostname)",Hostname就是你输入的主机名.

-s  在每台机器执行Network Shell脚本,隐式说明执行的是runscript命令。

-?  输出帮助

## 6 返回值

如果命令或脚本正常执行,则Exit Code是0,如果命令执行结果Exit Code不是0的话,则Exit Code就是0

## 7 作者

runcmd和runscript命令的作者是Thomas Kraus

BSA Network Shell系列-runcmd/runscript命令的更多相关文章

  1. BSA Network Shell系列-nexec | runcmd | runscript | scriptutil的异同

    说明下nexec.runcmd.runscript.scriptutil的异同 相同点: 四者都可以在远程机器执行命令.或者调用脚本. 不同点: nexec支持NSH命令,可以执行远程机的本地命令(非 ...

  2. BSA Network Shell系列-nexec命令

    # nexec ## 1 说明:nexec是远程命令接口引擎 ,用于在远程主机执行命令 nexec [-?] [-t term] [-o] [-i] [-l] [-nohup hostname &qu ...

  3. BSA Network Shell系列-nsh命令

    nsh nsh命令软链接到zsh,直接运行nsh可进入Network Shell,所有的Network Shell命令都需要运行nsh进入Network Shell执行 1 使用cd命令访问远程主机和 ...

  4. BSA Network Shell系列-scriptutil命令

    scriptutil ## 1 功能概述 scriptutil复制脚本到远程机的某个目录,然后在该目录执行脚本. 它的优点就是脚本是non-NSH的脚本.不支持NSH命令,执行起来的效果和runscr ...

  5. BSA Network Shell系列-redi命令

    redi ## 1 功能概述 redi将输出重定向到一个文件中 ## 2 语法 redi [-?] [-a] filename ## 3 使用示例 1 将输出重定向到隐式路径所在主机的/tmp/hah ...

  6. BSA Network Shell系列-nlogin命令

    nlogin 1 说明 nlogin 是一种通过RSCD Agent的通信的安全远程登录,使用和NSH工具相同的加密协议.可以作为telnet.rlogin或者ssh的替代工具(假如这些端口或协议禁用 ...

  7. BSA Network Shell系列-通过NSH执行Powershell,VBScript或bat files脚本

    参考:Running Powershell, VBScript, or bat files via NSH 如果你直接在NSH命令行执行的话,可以参考我翻译的下面的东东,如果想运行NSH 脚本作业的话 ...

  8. Linux Shell系列教程之(八)Shell printf命令详解

    本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell p ...

  9. Linux Shell系列教程之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

随机推荐

  1. Java框架之Spring MVC(二)

    一.Spring MVC 验证 JSR 303 是ajvaEE6 中的一项子规范 ,叫 Bean Validation 用于对javaBean中的字段进行校验. 官方的参考实现是: Hibernate ...

  2. 【NOIP2012】旅行计划

    题解 双向链表加倍增... 正写着不一定能写对2333 终于写对了... 然而我的双向链表和别人的都不一样... 瑟瑟发抖... 代码 //by 减维 #include<cstdio> # ...

  3. 在ASP.NET Core 2.0中使用MemoryCache

    说到内存缓存大家可能立马想到了HttpRuntime.Cache,它位于System.Web命名空间下,但是在ASP.NET Core中System.Web已经不复存在.今儿个就简单的聊聊如何在ASP ...

  4. CSS属性:定位属性(图文详解)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. CSS的定位属性有三种,分别是绝对定位.相对定位.固定定位. posit ...

  5. ArrayList排序算法的源码

    ArrayList,排序方法的调用过程 // 排序方法 public void sort(Comparator<? super E> c) { final int expectedModC ...

  6. Java泛型集合

    所谓泛型就是允许在定义类.接口时指定类型形参,这个类型形参将在声明变量.创建对象时确定.增加了泛型支持后的集合,完全可以记住集合 中元素的类型,并可以在编译时检查集合中元素的类型.即解决一些安全问题, ...

  7. [bzoj3287] Mato的刷屏计划

    第一眼以为是傻逼斜率优化>_< f[i]表示按i次最多可输出字符数..f[i]=max{ f[i-1]+1,(i-j-1)*f[j] },j<i-2 结果n在100+的时候就喜闻乐见 ...

  8. angular $modal模态框

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. SpringBoot Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

    SpringBoot Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFact ...

  10. logback的使用和logback.xml详解

    一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分为下面下个模块: logback-core:其它两 ...