接到一个需求,对现有的ci任务做一些调整,好久没写shell脚本,遇到远程登录种变量无法赋值的问题。背景如下:
环境
hostA
1 | 192.168.1.1 |
存在普通权限用户userA,在userA目录下存在名为system,结构为如下的文件夹
1 | version |
其中version为文件,其余为文件夹,在version中只有一行,记录了某个文件夹的名字,我们称之为版本号。
hostB
1 | 192.168.2.1 |
hostA与hostB做了互信,现需要hostB登录到hostA,取得version记录的值,并进入相应的文件夹。
例如
1 | cat version |
过程
一开始,在hostB上写了如下脚本
1 | !/bin/bash |
结果无效,每次日志打印和调试都显示version=后面为空,期间尝试使用$(),grep来获取version里记录的值,结果没有变化,由于无值,cd默认切换到了userA的根目录,即/home/userA。
遂直接在hostA上执行如下操作,发现取到值,后续步骤也正常。
1 | cd /home/userA/system |
解决方案
初步猜测,ssh-tt a@b << eeooff这样的方式里,变量值无法传递,或者说,这个值只是hostA上的变量,脚本在hostB,并不支持。于是决定,先取的值,再进行下一步操作。
1 | version=`ssh userA@hostA " |
说明,变量可以在远程登录的时候传入,但不能传出。