我有一个可以自动运行Hive查询的脚本。我可以将脚本留在本地机器上,也可以放在网关机器上。如果我将其放在远程机器上,我可以运行update_table命令。
ssh user@gatewaymachinexyz.com ‘./update_table.sh'
然而,当我这样做时,它无法识别在远程机器上设置的环境变量。如果我通过ssh登录到远程机器,并只运行./update_table.sh,它就能正常运行。如何让它在从我的本地机器运行时识别环境变量?
我有一个可以自动运行Hive查询的脚本。我可以将脚本留在本地机器上,也可以放在网关机器上。如果我将其放在远程机器上,我可以运行update_table命令。
ssh user@gatewaymachinexyz.com ‘./update_table.sh'
ssh
命令时,默认情况下,ssh
不会为会话分配伪终端(tty)。因此,可能会使用不同的启动脚本集。并且根据TERM
环境变量的存在/缺失,采取不同的脚本分支。ssh
man:当服务器接受了用户身份后,服务器将在非交互式会话中执行给定的命令;或者,如果没有指定命令,则登录到机器并将正常 shell 作为交互式会话提供给用户。
ssh
分配tty,请使用-t
开关:ssh -t user@gatewaymachinexyz.com ‘./update_table.sh'
ssh
手册:
-t
强制分配伪终端。这可用于在远程计算机上执行任意基于屏幕的程序,非常有用,例如在实现菜单服务时。多个-t
选项会强制分配tty,即使ssh
没有本地tty。
也许你可以通过以下方式获取你的环境:
ssh user@gatewaymachinexyz.com 'source /etc/bashrc && source /etc/profile && ./update_table.sh'
或者:
ssh user@gatewaymachinexyz.com 'source ~/.bashrc && source ~/.bash_profile && ./update_table.sh'
你可以从你的bash_rc中获取环境变量,然后再使用它。
ssh user@gatewaymachinexyz.com "source ~/.bashrc; ./update_table.sh"
update_table.sh
文件并添加source /etc/bashrc/
或source /etc/profile
命令,它将会source
您的远程环境。 - chengpohi