shell 无法使用ssh命令在远程激活conda环境

c9x0cxw0  于 12个月前  发布在  Shell
关注(0)|答案(2)|浏览(262)

我正在编写一个bash shell脚本,可以在本地计算机上运行,以更新和重新部署托管在AWS E2示例上的简单应用程序。有一句话我特别纠结:我似乎无法在ssh命令中激活conda环境。
ssh -i $private_key_file $public_dns "conda activate ENVIRONMENT_NAME"
返回:bash: line 1: conda: command not found
但是,如果我使用ssh -i $private_key_file $public_dns进行ssh,然后单独运行conda activate ENVIRONMENT_NAME,则可以正常工作。
这是怎么回事?我的shell脚本中的所有其他命令都可以很好地使用ssh -i $private_key_file $public_dns "COMMAND"语法。
我的示例运行的是Ubuntu 22.04,如果相关的话。

tv6aics1

tv6aics11#

ssh -i $private_key_file $public_dns "conda activate ENVIRONMENT_NAME"

返回:bash: line 1: conda: command not found
因为在路径中找不到conda命令。
但是,如果我使用ssh -i $private_key_file $public_dns进行ssh,然后单独运行conda activate ENVIRONMENT_NAME,则可以正常工作。
有道理。
这是怎么回事?
您的conda命令不在系统的默认路径中。您可能安装了个人副本而不是系统范围的副本。您的个人shell设置脚本.bash_profile和/或.bashrc准备您的 interactive shell以运行conda命令,但是当您以非交互方式启动shell时,这些脚本不会被读取,就像第一个示例中的ssh代表您所做的那样。
你可以这样做

ssh -i $private_key_file $public_dns ". .bashrc && conda activate ENVIRONMENT_NAME"

,但我不明白这有什么意义,因为在其中激活conda的shell会立即终止,从而影响整个练习。无论您想在conda环境中运行什么,都可以考虑在E2端编写一个 Package 器脚本,以便在正确的环境中运行它。

slwdgvem

slwdgvem2#

经过进一步的搜索,我发现我的.bashrc文件包含以下行:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

我通过简单地将conda块移到这条线上来解决这个问题。我从“社区维基”对this question的回应中发现了这一点。
我尝试的是:

  • 在运行conda activate ENVIRONMENT_NAME之前查找.bashrc文件。这并没有解决问题,显然是因为它仍然在我的非交互式会话中留下了脚本。
  • .bash_profile文件中查找.bashrc,这是上面链接的线程中推荐的另一个首选答案。虽然这在采购.bashrc时确实有效,但它仍然存在于非交互条件下。

相关问题