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

ade*_*rtc 2 ssh bash scala sbt

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

ssh my_username@<server ip> "cd <project folder>; sbt 'run-main Foo' "
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dan*_*ger 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中设置.