shell脚本ssh远程执行命令给变量赋值的问题解决

 更新时间:2023年07月05日 10:17:14   作者:iRayCheung  
本文主要介绍了shell脚本ssh远程执行命令给变量赋值的问题解决,就是从A机器通过SSH方式到B机器,并执行相关的命令,具有一定的参考价值,感兴趣的可以了解一下

需求及目标

从A机器通过SSH方式到B机器,并执行相关的命令。命令中包含变量及变量的赋值。

代码如下,意思是,ssh到192.111.111.27这台机器,cd到 / 根目录下,并执行ls命令,如果ls出来的结果不为空,则执行echo命令。可以肯定的是 / 根目录下是有内容的。

ssh -i /root/.ssh/private_key -tt -o StrictHostKeyChecking=no  rbadmin_app1@192.111.111.27 << eof
cd /
LSRESULT="$(ls)"
echo $LSRESULT
exit
eof

可以看到当执行到 echo 命令的时候,输出的是空,这就很奇怪。

问题产生的原因

这是因为我们将远程执行的命令和变量赋值语句放在了 SSH 的输入重定向中 (<< eof … eof)。在这种情况下,脚本中的变量赋值语句将在本地 Shell 中执行,而不是远程机器上。也就是说变量赋值语句其实不会在你远程执行的这台B机器上去执行,而是等到ssh命令完成后,回到机器A上后去执行,实际 ls 命令执行的路径是机器A在执行ssh命令时所在的路径。

问题的解决

ssh -i /root/.ssh/private_key -tt -o StrictHostKeyChecking=no  rbadmin_app1@192.111.111.27 << eof
cd /
LSRESULT="\$(ls)"
echo \$LSRESULT
exit
eof

可以看到此时,执行echo命令时,就输出了远程机器上执行的ls命令。修改的地方很简单,在执行的语句外层的$符号前加上反斜杠 \ , 在引用的变量上加上反斜杠 \ 即可。这是由于命令和变量在远程机器上执行,因此需要使用 \ 进行适当的转义,以确保变量能够正确地被解析和赋值。

 到此这篇关于shell脚本ssh远程执行命令给变量赋值的问题解决的文章就介绍到这了,更多相关shell ssh远程变量赋值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux虚拟机上安装配置redis3.0.7

    linux虚拟机上安装配置redis3.0.7

    本篇内容给大家介绍在linux虚拟机上安装redis3.0.7这个版本的过程以及相关的配置问题。
    2017-11-11
  • Shell脚本实现监控iptables规则是否被修改

    Shell脚本实现监控iptables规则是否被修改

    这篇文章主要介绍了Shell脚本实现监控iptables规则是否被修改,本文直接给出实现代码,需要的朋友可以参考下
    2014-12-12
  • 一天一个shell命令 linux文本操作系列-wc命令详解

    一天一个shell命令 linux文本操作系列-wc命令详解

    这篇文章主要介绍了一天一个shell命令 linux文本操作系列-wc命令详解,需要的朋友可以参考下
    2016-06-06
  • Shell数组添加元素及注意事项

    Shell数组添加元素及注意事项

    这篇文章主要介绍了Shell数组添加元素及注意事项,向Shell数组添加元素有多种方法,每种方法在使用时都有一些需要注意的地方,感兴趣的就一起来了解一下
    2020-12-12
  • LINUX 生产环境搭建推荐教程

    LINUX 生产环境搭建推荐教程

    由于linux生产环境搭建步骤非常多,很繁琐而且又是必不可少的步骤。虽然已经做过很多次,但是由于步骤繁琐,很容易忘记,下面小编抽个时间把linux生产环境搭建步骤记录下来,分享在脚本之家平台,以便需要之时使用
    2015-10-10
  • Shell AWK编程的基本介绍和使用详解

    Shell AWK编程的基本介绍和使用详解

    AWK可以看成一门独立的语言,它拥有语言的基本特征,换句话说AWK可以写出极其繁琐和复杂的程序,AWK的语法比Shell的语法还难以接收,这篇文章主要介绍了Shell AWK编程的介绍和基本使用,需要的朋友可以参考下
    2022-06-06
  • linux中systemctl详细理解及常用命令解析

    linux中systemctl详细理解及常用命令解析

    systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动,本文给大家介绍linux中systemctl详细理解及常用命令,感兴趣的朋友一起看看吧
    2025-04-04
  • Shell脚本经典之Fork炸弹的分析与预防

    Shell脚本经典之Fork炸弹的分析与预防

    这篇文章主要给大家介绍了Shell脚本经典之Fork炸弹的分析与预防,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • 执行shell 脚本将日志全部输出到文件的多种方法

    执行shell 脚本将日志全部输出到文件的多种方法

    执行Shell脚本时,可将所有输出(stdout+stderr)重定向到日志文件,方法包括直接重定向(> 2>&1)、追加模式(>>)、tee命令(屏幕+文件)、脚本内重定向(exec)及logger系统日志,推荐方法1或2,结合logrotate管理日志大小
    2025-07-07
  • 关于ssh连不上问题的解决方法(必看)

    关于ssh连不上问题的解决方法(必看)

    下面小编就为大家带来一篇关于ssh连不上问题的解决方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论