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


person adelbertc    schedule 21.04.2012    source источник


Ответы (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 устанавливается только в интерактивных оболочках.

person Daniel Roethlisberger    schedule 21.04.2012