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

Другие вопросы по тегам