2016-04-11 7 views
0

を使用して*上のエラー(アスタリスク)文字私は、私はそれが問題なく動作するターミナル内でコマンドをコピーしますが、実行している場合はScalaのスカラ座、scala.sys.process

val cmd = "scp -r /path/to/dir/* [email protected]:target/dir" 
print(cmd)  
cmd.!! 

からのコマンドを実行しようとしていますそれを使って!私が得る方法

/path/to/dir/*: No such file or directory 

何が問題なのですか?おかげ

+0

bashは '*'あなたのためのコマンドを実行する前に展開します。 bashでコマンドを実行してみてください –

答えて

1

アスタリスクがbashによって拡張されているので、あなたはあなたのためのコマンドを実行するbashを取得する必要があります、次のように行うことができます。

val cmd = "echo \"scp -r /path/to/dir/* [email protected]:target/dir\" | bash" 
print(cmd)  
cmd.!! 
+1

ここでbashに渡す文字列をどのように構築するかは非常に注意してください。いくつかの厄介な注入攻撃の可能性があります。例えば。ユーザーからのパスを取得していて、そのパス名に rm -rf〜を埋め込んだ場合... –

+0

同じ問題が引き続き発生します。 ( "scp -r/path/to/dir/* user @ ip:target/dir \"というコードを実行しています)。 bash) - echoコマンドに続くすべての文字列を表示しています –

関連する問題