2017-08-05 11 views
1

私のシェルスクリプトをsys.processのパッケージでスカラーコードに移動しようとしました。
シェルコンテキストを保存できないので、"ls ./somedir" !"cd ./somedir" !"ls ./" !に置き換えることはできません。
(PS:この方法では、表記!は、シェルコマンドなどの文字列を消費しますし、Scalaではimport sys.process._た後、それを実行する)方法シェルコマンドを実行すると、端末がないだけのようにそれコンテキストを保存するためにshellコマンドを呼び出して、scalaで後者のコマンドに影響を与える方法は?

また、ssh [email protected]をサポートして、リモートセッションを開くことができれば幸いです。

ありがとうございました。

+0

JVMで実行されているプロセスは、自身の環境を変更することはできません。このトピックの詳細については、[この質問](https://stackoverflow.com/questions/318239/how-do-i-set-environment-variables-from-java)とその回答を参照してください。 – jwvh

+0

JSchというライブラリが見つかりました。それは、シェルコマンドを処理するInputStreamとOutputStreamをサポートしています。しかし、それは幸せに使用するラッパーを必要としています。私はthisを実行しています.SHをベースにしているので、ローカルシェルコマンドを呼び出すにはローカルSSHを開くので;-) – LoranceChen

答えて

0

Ammonite shellは、探しているbashの代替品であると主張しています。たとえば、作業ディレクトリの概念だけでなく、コマンド実行の利便性もサポートしています。

+0

こんにちはREPLではなく、私のプログラムでシェルコマンドを使うことができますか? – LoranceChen

+0

bashスクリプトをScalaスクリプトに置き換えるのが最も理にかなっていると思いますが、アンモニアhttp://ammonite.io/#Embeddingを埋め込むこともできますし、ホイールを再作成する場合はlibsのほんの一部ですhttps: /github.com/lihaoyi/ammonite –

+0

埋め込みにはこの時点でいくつかのバグがあります:https://github.com/lihaoyi/Ammonite/issues/276#issuecomment-320557669 – LoranceChen

0

ホイールはgit repoに作成してください。
基本的なシェルコマンドは楽しく使用します。先進的な使用はまだ改善する必要があります。例えば

:、他に
val lsRst: Either[Int, String] = shell.exc("ls")
、失敗Left手段をもたらすRightが成功したことを意味する:シェルコマンドを実行
val shell = new Shell(Auth("localhost", "username", 22, "password"))


は、SSHシェルを作成します。
右の文字列データを取得し、スカラ言語と混合することができます。

関連する問題