scala 2.12 ProcessをSeqで使う話

2.13だとちゃんと動いた

[shell gutter="false"] 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 " [/shell]

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

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

.!!をつけなればbuilderが見れる [shell gutter="false"] scala> (Process("/bin/su - steam -c 'ls -lah'")) res8: scala.sys.process.ProcessBuilder = [/bin/su, -, steam, -c, 'ls, -lah'] [/shell]

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

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

教えてもらったのがProcessにSeqで渡せばスペース区切りにされてしまっていた部分をちゃんと自分のやりたいように区切れる 解決した [shell gutter="false"] 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 ... [/shell]