所以我试图做一些涉及通过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
答案 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中设置。