Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将shell脚本中的环境变量设置为在远程服务器上运行_Linux_Bash_Shell_Ssh_Environment Variables - Fatal编程技术网

Linux 将shell脚本中的环境变量设置为在远程服务器上运行

Linux 将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,那么它运行正常。当从本地计算机运行时,如何让它识别环境变量 也许您可以使用以下方法来获取环境资源

我有一个脚本,可以自动在配置单元中运行查询。我可以将脚本留在本地计算机上,也可以将其放在网关计算机上。如果我在远程机器上有它,我可以像这样运行update_table

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'