我正在编写一个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,如果相关的话。
2条答案
按热度按时间tv6aics11#
返回:
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
代表您所做的那样。你可以这样做
,但我不明白这有什么意义,因为在其中激活
conda
的shell会立即终止,从而影响整个练习。无论您想在conda环境中运行什么,都可以考虑在E2端编写一个 Package 器脚本,以便在正确的环境中运行它。slwdgvem2#
经过进一步的搜索,我发现我的
.bashrc
文件包含以下行:我通过简单地将
conda
块移到这条线上来解决这个问题。我从“社区维基”对this question的回应中发现了这一点。我尝试的是:
conda activate ENVIRONMENT_NAME
之前查找.bashrc
文件。这并没有解决问题,显然是因为它仍然在我的非交互式会话中留下了脚本。.bash_profile
文件中查找.bashrc
,这是上面链接的线程中推荐的另一个首选答案。虽然这在采购.bashrc
时确实有效,但它仍然存在于非交互条件下。