Linux 将shell脚本中的环境变量设置为在远程服务器上运行
我有一个脚本,可以自动在配置单元中运行查询。我可以将脚本留在本地计算机上,也可以将其放在网关计算机上。如果我在远程机器上有它,我可以像这样运行update_tableLinux 将shell脚本中的环境变量设置为在远程服务器上运行,linux,bash,shell,ssh,environment-variables,Linux,Bash,Shell,Ssh,Environment Variables,我有一个脚本,可以自动在配置单元中运行查询。我可以将脚本留在本地计算机上,也可以将其放在网关计算机上。如果我在远程机器上有它,我可以像这样运行update_table ssh user@gatewaymachinexyz.com ‘./update_table.sh' 但是,当我这样做时,它无法识别远程机器上设置的环境变量。如果我通过ssh登录到远程机器,并只运行./update_table.sh,那么它运行正常。当从本地计算机运行时,如何让它识别环境变量 也许您可以使用以下方法来获取环境资源
ssh user@gatewaymachinexyz.com ‘./update_table.sh'
但是,当我这样做时,它无法识别远程机器上设置的环境变量。如果我通过ssh登录到远程机器,并只运行./update_table.sh,那么它运行正常。当从本地计算机运行时,如何让它识别环境变量 也许您可以使用以下方法来获取环境资源:
ssh user@gatewaymachinexyz.com 'source /etc/bashrc && source /etc/profile && ./update_table.sh'
或:
从bash_rc中获取环境变量怎么样
sshuser@gatewaymachinexyz.com“source~/.bashrc;/update_table.sh”
当使用ssh
指定命令时,ssh
默认情况下不会为会话分配伪终端(tty)。因此,将(可能)获取一组不同的启动脚本。和/或脚本中的不同分支根据术语
环境变量的存在/不存在而进行
见:
当服务器接受用户身份时,服务器在非交互式会话中执行给定命令,或者,如果未指定命令,则登录到计算机并将普通shell作为交互式会话提供给用户
要强制
ssh
分配tty,请使用-t
开关:
ssh -t user@gatewaymachinexyz.com ‘./update_table.sh'
见:
-t
强制伪终端分配。这可用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时。多个-t
选项强制分配tty,即使ssh
没有本地tty
虽然您不应该通过强制分配伪终端来解决这个问题,但是您最好修复启动脚本,以便为所有会话设置相同的环境 试试詹金斯管道。它会起作用的。
示例:-sh“ssh(然后是您的ssh行)”对不起,这会在远程计算机上生成bashrc吗?我将如何指定查看远程计算机而不是本地计算机?只需编辑
update\u table.sh
并添加source/etc/bashrc/
或source/etc/profile
。它将source
您的远程环境。这里的更多解释将有所帮助。詹金斯管道是什么还不清楚。谢谢你的评论。实际上,我在使用Jenkins AWS CLI加速AWS infra并使用自定义脚本配置EC2实例时遇到了这个问题,我使用的命令是:-ssh-i mypemfile.pem-t EC2-user@IP“ls-l&&source myscript.sh&./myscript.sh”注意:-在本例中,myscript.sh位于/home/ec2用户目录中。确定,你的意思是你在詹金斯身上有问题,不是你用詹金斯作为解决方案,对吗?
ssh -t user@gatewaymachinexyz.com ‘./update_table.sh'