sbt (Scala) через SSH приводит к тому, что команда не найдена, но работает, если я делаю это сам
Поэтому я пытаюсь сделать что-то, что включает в себя бег sbt
через команду SSH, и вот что я пытаюсь:
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 ответ
Когда вы входите, bash
запускается как интерактивная оболочка. Когда вы запускаете команды напрямую через ssh
bash запускается как неинтерактивная оболочка, и поэтому различные исходные файлы поставляются (см. страницы руководства 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
устанавливается только в интерактивных оболочках.