2012-04-21 12 views
2

所以我試圖做一些涉及通過SSH命令運行sbt,這就是我想要的:通過SSH的sbt(Scala)結果找不到命令,但是如果我自己做的話可以工作

ssh [email protected]<server ip> "cd <project folder>; sbt 'run-main Foo' " 

當我這樣做,但是,我得到一個錯誤信息:bash: sbt: command not found

然後我去到SSH服務器自己,cd到項目文件夾,然後運行sbt 'run-main Foo',一切都很好地工作。我已通過ssh [email protected]<server ip> "echo $PATH"檢查確認sbt位於遠程服務器上的$PATH變量上,並顯示正確的值。

我覺得這是一個簡單的修復,但無法弄清楚......幫助? 謝謝! -kstruct

回答

5

登錄時,bash作爲交互式shell運行。當您通過ssh直接運行命令時,bash將作爲非交互式shell運行,因此會獲得不同的初始化文件(請參閱bash手冊頁中的具體內容)。有許多方法來解決這個問題,比如:

  • 直接通過ssh
  • 調用它時編輯.bashrc使用的完整路徑sbt和丟失的目錄添加到PATH環境變量

請注意,由於雙引號,您的測試ssh [email protected]<server ip> "echo $PATH"實際上在您的客戶端而不是您的服務器上打印了PATH。使用ssh [email protected]<server ip> 'echo $PATH'ssh [email protected]<server ip> env從服務器環境打印PATH。當使用env進行檢查時,您會看到PS1僅在交互式shell中設置。

相關問題