我在服务器中有一个Shell脚本,该脚本在另一个服务器中调用另一个Shell脚本。当我尝试获取第二个服务器外壳脚本中分配的变量时,无法获取它。
第一台服务器中的脚本
> ssh -o StrictHostKeyChecking=no -q oracle@$database_server_ip "cd $script_loc && . ./quick"
>echo "$value"
第二台服务器中的脚本
> export value=my name
当我尝试从另一个服务器中的第二个脚本获取变量值时,将其称为第二个服务器脚本。我无法获得变量值。需要帮助
答案 0 :(得分:0)
似乎您想保存从远程脚本导出的变量,该变量是通过ssh会话调用的。
如果导出变量时您在同一台服务器上,则可以正常工作,但由于要使用两个单独的登录环境,因此不能简单地将变量导出到远程Shell上并保存它。
有两种方法可以做到这一点,尽管我可以想到更多的方法:
1)在远程打印上有./quick
要保存的变量的值。您可以保存运行期间在本地打印的内容:
mylocal=$(ssh -o StrictHostKeyChecking=no -q oracle@$database_server_ip "cd $script_loc && . ./quick")
在此请注意-如果发生运行时错误,则错误消息或运行时意外的内容最终会进入mylocal
。这可能会导致变量出现意外情况。通常,您可以检查ssh
命令的结果代码,以查看遥控器是否干净退出(在ssh运行后立即检查bash变量$?
)。如果一切正常,通常这应该是0
,这表明您可以信任mylocal
中的值。如果quick
在其代码中发布了exit 2
,则ssh返回后,$?
应该在本地包含2。
2)在quick
脚本中进行一些额外的错误检查并处理那里的所有错误,以确保您可以调试运行时问题,并且只吐出要在本地保存的变量的值(在注释中提到)以上)。您仍将以相同的方式调用ssh
运行,只是故意进行一些额外的检查以终止错误代码(exit 2
),以便可以在本地检查$?
是否有错误。如果$?
是0
,则表示一切正常,您的局部变量有效。