sbt(Scala)通过SSH导致找不到命令,但如果我自己这样做,则有效

时间:2012-04-21 21:37:28

标签: bash scala ssh sbt

所以我试图做一些涉及通过SSH命令运行sbt的事情,这就是我正在尝试的事情:

ssh my_username@<server ip> "cd <project folder>; sbt 'run-main Foo' "

但是,当我这样做时,收到一条错误消息:bash: sbt: command not found

然后我自己将SSH连接到服务器,cd到项目文件夹,然后运行sbt 'run-main Foo',一切正常。我已通过sbt检查以确保$PATH位于远程服务器上的ssh my_username@<server ip> "echo $PATH"变量上,并显示正确的值。

我觉得这是一个简单的解决方法,但无法弄清楚...帮助? 谢谢! -kstruct

1 个答案:

答案 0 :(得分:5)

登录时,bash作为交互式shell运行。当您直接通过ssh运行命令时,bash作为非交互式shell运行,因此会生成不同的初始化文件(请参阅bash手册页,确切地说)。有很多方法可以解决这个问题,例如:

  • 直接通过sbt
  • 拨打ssh的完整路径
  • 编辑.bashrc并将缺少的目录添加到PATH环境变量

请注意,由于双引号,您的测试ssh my_username@<server ip> "echo $PATH"实际上会在您的客户端而不是您的服务器上打印PATH。使用ssh my_username@<server ip> 'echo $PATH'ssh my_username@<server ip> env从服务器环境中打印PATH。使用env进行检查时,您会看到PS1仅在交互式shell中设置。