scala 2.12 ProcessをSeqで使う話

Pocket

2.13だとちゃんと動いた

scala> (Process("/bin/su - steam -c 'ls -lah'")).!!
/bin/su: invalid option -- 'a'
java.lang.RuntimeException: Nonzero exit value: 1
  at scala.sys.package$.error(package.scala:30)
  at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.slurp(ProcessBuilderImpl.scala:138)
  at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.$bang$bang(ProcessBuilderImpl.scala:108)
  ... 28 elided

scala> (Process("/bin/su - steam -c 'ls'")).!!
res6: String =
"GameUserSettings.ini.org
servers
Steam
steamcmd_linux
steamcmd_linux.tar.gz
"

lsは問題ないのにls -lahにしたらエラーがでたよ
エラーログを読んでみると /bin/su にオプションaがおかしいよ

いやいやsuのオプションで渡しているわけではないんだが?

.!!をつけなればbuilderが見れる

scala> (Process("/bin/su - steam -c 'ls -lah'"))
res8: scala.sys.process.ProcessBuilder = [/bin/su, -, steam, -c, 'ls, -lah']

これをみる限りシングルクォートで囲んでいるのにスペース区切りで分割されてしまっている

冒頭でも書いたが2.13だと問題ない
mac 2.13, linux server 2.12.8なのでもしかしたらその差異はあるかもしれないけどおそらくscalaバージョン(調べてない

教えてもらったのがProcessにSeqで渡せばスペース区切りにされてしまっていた部分をちゃんと自分のやりたいように区切れる
解決した

scala> (Process(Seq("/bin/su", "-", "steam", "-c","ls -lah"))).!!
res13: String =
"total 2.4M
drwx------  9 steam steam  297 Mar  8 18:37 .
drwxr-xr-x. 7 root  root    89 Mar  3 04:19 ..
drwx------  3 steam steam   17 Mar  3 04:12 .ansible
-rw-------  1 steam steam 2.1K Mar 16 20:17 .bash_history
-rw-r--r--  1 steam steam   18 Aug  8  2019 .bash_logout
-rw-r--r--  1 steam steam  193 Aug  8  2019 .bash_profile
-rw-r--r--  1 steam steam  231 Aug  8  2019 .bashrc
drwxrwxr-x  3 steam steam   18 Mar  3 03:42 .cache
drwxrwxr-x  3 steam steam   18 Mar  3 03:42 .config
-rw-------  1 root  root  5.0K Mar  8 18:37 GameUserSettings.ini.org
-rw-r--r--  1 steam steam  172 Oct 31  2018 .kshrc
-rw-------  1 steam steam   49 Mar  3 03:51 .lesshst
drwxr-xr-x  3 steam steam   17 Mar  8 18:10 servers
drwxr-xr-x  2 steam steam   26 Mar 16 20:09 ...

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください