2011-12-04 8 views
9

私は最近、Scalaでsys.processパッケージを発見し、その力で楽しんでいました。scala.sys.processを使用したbash文字列の実行

しかし、私はそれをbash pipeとbackticksと組み合わせようとすると、私は立ち往生します。

明らかにこれは動作しません:

​​

私は、目的の動作を取得するには、bashの実行ファイルを使用しようとしました:私は間違って

scala> "bash -e echo `date`" !! 
/bin/echo: /bin/echo: cannot execute binary file 
java.lang.RuntimeException: Nonzero exit value: 126 

何をしているのですか?

編集:

scala> "bash -ic 'echo `date`'" !! 
`date`': unexpected EOF while looking for matching `'' 
`date`': syntax error: unexpected end of file 
java.lang.RuntimeException: Nonzero exit value: 1 
+0

参考例(レックスカーのソリューションが動作しない理由はここにある)が、私はあなたがこのためにすべてのbashを必要としない実現を願って:!! ' –

+0

'配列(「日付」)@ ToddOwen - 確かに、それは単なる例であった。 – Rogach

答えて

21

あなたは間違っている、実際には複数の事をやっています。 bashの-cオプションを使用する必要があります。また、Seq [String]を各パラメータと共に使用して独自のStringをbashする必要があります。そうしないと、scalaライブラリは文字列をスペース文字ごとに分割しません。

scala> import sys.process.stringSeqToProcess 
import sys.process.stringSeqToProcess 

scala> Seq("bash", "-c", "echo `date`")!! 
res20: String = 
"Sun Dec 4 16:40:04 CET 2011 
" 
+1

'Seq'バージョンについての良い点。私はいつもそうしていたので、実際にはその代わりに使用しました。 –

+0

次は、スクリプトを実行し、引き続きargsを指定する別の例です。 IE: test.sh echo $ 1 scala> Seq( "/ somePath/test.sh"、 "HI")! ここでのクレジット: http://stackoverflow.com/questions/9039167/scala-system-process-and-whitespace – Nick

関連する問題