Linux ssh远程执行命令(解释)

对于简单的命令:

ssh user@remoteNode "cd /home ; ls"

注意
**1.**双引号,必须有。如果不加双引号,第二个ls命令在本地执行
**2.**分号,两个命令之间用分号隔开

对于脚本的方式:

#!/bin/bash
ssh user@remoteNode > /dev/null 2>&1 << eeooff
cd /home
ls
exit
eeooff
echo done!

远程执行的内容在“<< eeooff ” 至“ eeooff ”之间,在远程机器上的操作就位于其中,注意的点
1. ssh执行<< eeooff后的命令直到遇到eeooff这样的内容结束,eeooff可以随便修改成其他形式。
**2.**重定向目的在于不显示远程的输出了。
**2.**在结束前,加exit退出远程节点。

shell脚本解释

在Linux系统中0 1 2是一个文件描述符
0 标准输入 stdin 键盘
1 标准输出 stdout 屏幕
2 标准错误输出 stderr 屏幕
我们在简单地用<或>时,相当于使用 0< 或 1>

关于2>&1的含义

含义:将标准错误输出重定向到标准输出
符号>&是一个整体,不可分开,分开后就不是上述含义了。

比如有些人可能会这么想:2是标准错误输入,1是标准输出,>是重定向符号,那么"将标准错误输出重定向到标准输出"是不是就应该写成"2>1"就行了?是这样吗?如果是尝试过,你就知道2>1的写法其实是将标准错误输出重定向到名为"1"的文件里去了

考虑如下一条shell命令

ssh user@remoteNode > /dev/log 2>&1

为什么2>&1一定要写到>log后面,才表示标准错误输出和标准输出都定向到log中?
不妨把1和2都理解是一个指针,然后来看上面的语句就是这样的:

**1.**本来1----->屏幕 (1指向屏幕)
**2.**执行>log后, 1----->log (1指向log)
**3.**执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)

再来分析下

ssh user@remoteNode 2>&1 > /dev/log 

**1.**本来1----->屏幕 (1指向屏幕)
**2.**执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
**3.**执行>log后, 1----->log (1指向log,2还是指向屏幕)
所以这就不是我们想要的结果。

关于<< eeooff的含义

 cmd << text
 ...
 ...
 ...
 text

从命令行读取输入,直到遇到与text相同的行结束。

参考:
https://www.cnblogs.com/softidea/p/6855045.html
https://blog.csdn.net/zhaominpro/article/details/82630528
https://zhidao.baidu.com/question/196553141.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值