рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдмрд╛рд╣рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЪрд▓рд╛рдирд╛

рдкрд░рд┐рдЪрдп


рдореЗрд░реЗ рдШрд░ рдХреЗ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдЫреЛрдЯреЗ рдмрд╛рд╣рд░реА рдкреНрд░реЛрд╕реЗрд╕ рдореИрдиреЗрдЬрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрд╛рд╣рд░реА рдбреЗрдореЙрди рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВ, рдЬрдм рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛, рдЪрд╛рд▓реВ рдХрд░рдирд╛, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓рдирд╛ рдЖрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдореЗрдВ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рд╣реА рджреБрд░реНрд▓рдн рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдореИрдВ рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╡рд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд░рд╣реА рд╣реИред рдФрд░ рдореИрдВ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛: рд╕реНрдХрд╛рд▓рд╛ рдиреЗ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдмрд╛рд╣рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ


рджреЛ рд▓рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреА рдЖрдзрд╛рд░рд╢рд┐рд▓рд╛ рд╣реИрдВ: рдпреЗ scala.sys.process.Process рдФрд░ scala.sys.process.ProcessBuilder рд╣реИрдВ ред
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рдмреНрдпреВрд▓рд░ рдЖрдкрдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпреЗ рдЗрдХрд╛рдЗрдпрд╛рдБ рдкреИрдХреЗрдЬ scala.sys.process рдореЗрдВ рд╣реИрдВ ред рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдЪрд▓рд╛рдПрдБ:
scala> import scala.sys.process._ scala> val process: Process = Process("echo Hello World").run() scala> println(process.exitValue()) 

рд░рди рд╡рд┐рдзрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдШреЛрд╖рдгрд╛рдкрддреНрд░ ProcessBuilder рдЯреНрд░реЗ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЪрд▓рддреА рд╣реИ, рдбреЗрдЯрд╛ рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЯреНрд░реЗ рдореЗрдВ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИрдВ:

рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рдирдХ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ java.lang.Process рдХреЗ рд╕рдорд╛рди рд╣реИред
ProcessBuilder рдЯреНрд░реЗ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реАрдХреЗ рд╣реИрдВред рдореИрдВ рдореБрдЦреНрдп рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджреВрдВрдЧрд╛:

рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореБрдЭреЗ рдмрд╛рд╣рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдВрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рд░рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдФрд░ рдпрд╣рд╛рдБ рд╡рд┐рдзрд┐ рд╣реИ ! рдмрд╕ рдореЗрд░реЗ рд▓рд┐рдП рдлрд┐рдЯ рд╣реИред
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 scala> Process("echo Hello World!").! Hello World! res1: Int = 0 scala> Process("echo Hello World!").!! res2: String = "Hello World!" scala> Process("echo Hello World!").lines res3: Stream[String] = Stream(Hello World!, ?) 


рдЕрд╡реИрдз рдХрд╛рд╕реНрдЯрд┐рдВрдЧ


рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ ( java.lang.String ) рдФрд░ рдЕрдиреБрдХреНрд░рдо ( scala.collection.Seq ) рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ ProcessBuilder рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИрдВ ред
рд╣рдо рдЕрдкрдирд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 scala> "echo Hello World!".! Hello World! res2: Int = 0 

рдпрд╛ рддреЛ:
 scala> Seq("echo", "Hello", "World!").! Hello World! res3: Int = 0 

рдХрд╛рдлреА рд╣рдж рддрдХ, рдпрд╣ рд▓реЗрдЦрди рдХреЛ рдХрдо рдФрд░ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдФрд░ рдпрд╣ рдмрджрд▓реЗ рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдпреЛрдЬрди (рдкрд╛рдЗрдк)


рдкреНрд░реЛрд╕реЗрд╕ рдХреЙрд▓ рдХреЛ рд▓рд┐рдирдХреНрд╕ рдХрдорд╛рдВрдб рдЪреЗрди рдХреЗ рд╕рдорд╛рди рдЪреЗрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
 scala> "ls".! 11.txt 1.txt 2.txt 3.txt res2: Int = 0 scala> ("ls" #| "grep 1").! 11.txt 1.txt res6: Int = 0 

Ls рдХрдорд╛рдВрдб рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ grep рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Grep рдиреЗ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ 1 рдкрд░ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ред
рдЖрдк рд╕рд╢рд░реНрдд рд╕рдВрдЪрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 scala> ("find . -name *.txt -exec grep 0 {} ;" #| "xargs test -z" #&& "echo 0-free" #|| "echo 0-exists").! 0-exists res23: Int = 0 

рдпрд╣рд╛рдБ, рдпрджрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди * .txt рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рд╣реИрдВ, рддреЛ рдкрд╛рда рдореЗрдВ 0 рд╣реИ - рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ 0-рдХрдВрд╕реЛрд▓ рдкрд░ рдореМрдЬреВрдж рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ 0-рдореМрдЬреВрдж рд╣реИред
#&& - рдпрджрд┐ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдЧрд▓реА рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ;
#|| - рдкрд┐рдЫрд▓реЗ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдХреИрд▓рд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд▓рд╛рдЗрдирдХреНрд╕ рдЬреИрд╕реЗ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдЫреЛрдЯреЗ рд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддрд╛ рд╣реИред

рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдЖрдИ / рдУ рд╕реНрдЯреНрд░реАрдо


рдмрд╛рд╣рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╣рдорд╛рд░рд╛ рд╕рднреА рдХреЛрдб рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдмреЗрдХрд╛рд░ рд╣реИред
рдЕрдХреНрд╕рд░, рдЖрдкрдХреЛ рдЖрджреЗрд╢ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реБрдИ рддреНрд░реБрдЯрд┐ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рд░рди рдореЗрдВ, рдкреНрд░реЛрд╕реЗрд╕рдмреНрдпреВрд▓рд░ рдЯреНрд░реЗ рдореЗрдВ ;, !!, рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рддрд░реАрдХреЛрдВ рд╕реЗ, рдЖрдк рдкреНрд░реЛрд╕реЗрд╕рд▓реЙрдЧрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рд▓рд╛рдЗрди рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдореБрджреНрд░рд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ ProcessLogger рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 scala> var normalLines = 0 normalLines: Int = 0 scala> var errorLines = 0 errorLines: Int = 0 scala> val countLogger = ProcessLogger(line => normalLines += 1, | line => errorLines +=1) countLogger: scala.sys.process.ProcessLogger = scala.sys.process.ProcessLogger$$anon$1@459c8859 scala> "ls" ! countLogger res0: Int = 0 scala> println("normalLines: " + normalLines + ", errorLines: " + errorLines) normalLines: 4, errorLines: 0 

ProcessLogger рдЖрдкрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд░реНрдЧ scala.sys.process.ProcessIO рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рджреЛрдиреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг:
 Seq("grep", "1") run new ProcessIO((output: java.io.OutputStream) => { output.write("1.txt\n2.txt\n3.txt\n11.txt".getBytes) output.close() }, (input: java.io.InputStream) => { println(Source.fromInputStream(input).mkString) input.close() }, _.close()) 

рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╣реИ: рдпрд╣рд╛рдВ рд╣рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рд╣реИред
рдкреИрд░рд╛рдореАрдЯрд░ рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдереНрд░реЗрдбреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдмрд╛рд╣рд░реА рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╣реА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк #< рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ #> рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВ:
 scala> ("echo -e 1.txt\\n2.txt\\n3.txt" #> new java.io.File("1.txt")).! res21: Int = 0 scala> ("grep 1" #< new java.io.File("1.txt")).!! res22: String = "1.txt" 

рдЙрд╕реА рддрд░рд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рджреВрд╕рд░реА рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 scala> (new java.io.File("1.txt") #> new java.io.File("2.txt")).! res23: Int = 0 scala> "cat 2.txt".! 1.txt 2.txt 3.txt res24: Int = 0 

рдирд┐рд╖реНрдХрд░реНрд╖


рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдмрд╛рд╣рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред рдЬрд╛рд╡рд╛ рдореЗрдВ, рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд░реИрдкрд░реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд╛рджрдЧреА рдХреЗ рдХрд░реАрдм рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрд╛ред рдЖрдк http://www.scala-lang.org рдкрд░ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕реНрд░реЛрдд рдореЗрдВ рдЦреЛрдж рд╕рдХрддреЗ рд╣реИрдВ (рдЬреЛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣рд╛рдВ рд╕реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдпрд╛)ред jdk1.7 рдореЗрдВ, рд╣рдордиреЗ рд╡рд░реНрдЧ java.lang.ProcessBuilder рдХреЛ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рджрд┐рдпрд╛, рдФрд░ рдЬрд╛рд╡рд╛ рдмрд╛рд╣рд░реА рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕реНрдХрд╛рд▓рд╛ рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, jdk рджреВрд░ рд╣реИред

Source: https://habr.com/ru/post/In184412/


All Articles