接到一个需求,对现有的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 " |
说明,变量可以在远程登录的时候传入,但不能传出。