在Shell脚本中访问全局变量

时间:2020-05-15 10:32:36

标签: linux shell scripting sh

我在服务器中有一个Shell脚本,该脚本在另一个服务器中调用另一个Shell脚本。当我尝试获取第二个服务器外壳脚本中分配的变量时,无法获取它。

第一台服务器中的脚本

> ssh -o StrictHostKeyChecking=no -q oracle@$database_server_ip "cd $script_loc && . ./quick"
>echo "$value"

第二台服务器中的脚本

> export value=my name

当我尝试从另一个服务器中的第二个脚本获取变量值时,将其称为第二个服务器脚本。我无法获得变量值。需要帮助

1 个答案:

答案 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,则表示一切正常,您的局部变量有效。

相关问题