Трейт scala.sys.process.ProcessBuilder
Компаньон объект ProcessBuilder
трейт ProcessBuilder extends Source with Sink
Абстрактные члены-значения
абстрактный def !(log: ProcessLogger): Int
Запускает процесс, представленный этим билдером, ожидает его завершения и возвращает код выхода. Стандартный вывод и ошибка отправляются в указанный ProcessLogger.
абстрактный def !: Int
Запускает процесс, представленный этим билдером, ожидает его завершения и возвращает код выхода. Стандартный вывод и ошибка отправляются в консоль.
абстрактный def !!(log: ProcessLogger): String
Запускает процесс, представленный этим билдером, ожидает его завершения и возвращает вывод в виде строки. Стандартная ошибка отправляется в предоставленный ProcessLogger. Если код выхода не равен нулю, выбрасывается исключение.
абстрактный def !!: String
Запускает процесс, представленный этим билдером, ожидает его завершения и возвращает вывод в виде строки. Стандартная ошибка отправляется в консоль. Если код выхода не равен нулю, выбрасывается исключение.
абстрактный def !!<(log: ProcessLogger): String
Запускает процесс, представленный этим билдером, ожидает его завершения и возвращает вывод в виде строки. Стандартная ошибка отправляется в предоставленный ProcessLogger. Если код выхода не равен нулю, выбрасывается исключение. Новый запущенный процесс читает из стандартного ввода текущего процесса.
абстрактный def !!<: String
Запускает процесс, представленный этим билдером, ожидает его завершения и возвращает вывод в виде строки. Стандартная ошибка отправляется в консоль. Если код выхода не равен нулю, выбрасывается исключение. Новый запущенный процесс читает из стандартного ввода текущего процесса.
абстрактный def !<(log: ProcessLogger): Int
Запускает процесс, представленный этим билдером, ожидает его завершения и возвращает код выхода. Стандартный вывод и ошибка отправляются в указанный ProcessLogger. Новый запущенный процесс читает из стандартного ввода текущего процесса.
абстрактный def !<: Int
Запускает процесс, представленный этим билдером, ожидает его завершения и возвращает код выхода. Стандартный вывод и ошибка отправляются в консоль. Новый запущенный процесс читает из стандартного ввода текущего процесса.
абстрактный def ###(other: ProcessBuilder): ProcessBuilder
Создает команду, которая выполнит эту команду, а затем other. Код выхода будет кодом выхода other.
абстрактный def #&&(other: ProcessBuilder): ProcessBuilder
абстрактный def #|(other: ProcessBuilder): ProcessBuilder
Создает команду, которая выполнит эту команду и перенаправит вывод в other. other должна быть простой командой.
абстрактный def #||(other: ProcessBuilder): ProcessBuilder
абстрактный def canPipeTo: Boolean
абстрактный def hasExitValue: Boolean
Истина, если у этой команды есть код выхода, который должен быть передан пользователю. При наличии соединения между A и B, если B.hasExitValue истинно, то код выхода будет кодом выхода B; если ложно, то кодом выхода A. Это необходимо для предотвращения маскировки полезных кодов ошибок процесса при перенаправлении вывода (реализованном как соединение).
абстрактный def lazyLines(log: ProcessLogger, capacity: Integer): LazyList[String]
Запускает процесс, представленный этим билдером. Вывод возвращается как LazyList, который блокируется, когда строки недоступны, но процесс еще не завершен. Производительский процесс будет блокироваться, если указанная емкость строк заполнится без потребления из LazyList. Стандартная ошибка отправляется в предоставленный ProcessLogger. Если процесс завершается с ненулевым значением, LazyList предоставит все строки до завершения, а затем сгенерирует исключение.
абстрактный def lazyLines(log: ProcessLogger): LazyList[String]
Запускает процесс, представленный этим билдером. Результат возвращается как LazyList, который блокируется, когда строки недоступны, но процесс ещё не завершён. Стандартная ошибка отправляется в предоставленный ProcessLogger. Если процесс завершается с ненулевым значением, LazyList предоставит все строки до завершения, а затем сгенерирует исключение.
abstract def lazyLines(capacity: Integer): LazyList[String]
Запускает процесс, представленный этим билдером. Результат возвращается как LazyList, который блокируется, когда строки недоступны, но процесс ещё не завершён. Производящий процесс будет блокироваться, если заданная ёмкость строк заполнится, не будучи потреблённой из LazyList. Стандартная ошибка отправляется в консоль. Если процесс завершается с ненулевым значением, LazyList предоставит все строки до завершения, а затем сгенерирует исключение.
abstract def lazyLines: LazyList[String]
Запускает процесс, представленный этим билдером. Результат возвращается как LazyList, который блокируется, когда строки недоступны, но процесс ещё не завершён. Стандартная ошибка отправляется в консоль. Если процесс завершается с ненулевым значением, LazyList предоставит все строки до завершения, а затем сгенерирует исключение.
abstract def lazyLines_!(log: ProcessLogger, capacity: Integer): LazyList[String]
Запускает процесс, представленный этим билдером. Результат возвращается как LazyList, который блокируется, когда строки недоступны, но процесс ещё не завершён. Производящий процесс будет блокироваться, если заданная ёмкость строк заполнится, не будучи потреблённой из потока. Стандартная ошибка отправляется в предоставленный ProcessLogger. Если процесс завершается с ненулевым значением, LazyList предоставит все строки до завершения, но не сгенерирует исключение.
abstract def lazyLines_!(log: ProcessLogger): LazyList[String]
Запускает процесс, представленный этим билдером. Результат возвращается как LazyList, который блокируется, когда строки недоступны, но процесс ещё не завершён. Стандартная ошибка отправляется в предоставленный ProcessLogger. Если процесс завершается с ненулевым значением, LazyList предоставит все строки до завершения, но не сгенерирует исключение.
abstract def lazyLines_!(capacity: Integer): LazyList[String]
Запускает процесс, представленный этим билдером. Результат возвращается как LazyList, который блокируется, когда строки недоступны, но процесс ещё не завершён. Производящий процесс будет блокироваться, если заданная ёмкость строк заполнится, не будучи потреблённой из потока. Стандартная ошибка отправляется в консоль. Если процесс завершается с ненулевым значением, LazyList предоставит все строки до завершения, но не сгенерирует исключение.
abstract def lazyLines_!: LazyList[String]
Запускает процесс, представленный этим билдером. Результат возвращается как LazyList, который блокируется, когда строки недоступны, но процесс ещё не завершён. Стандартная ошибка отправляется в консоль. Если процесс завершается с ненулевым значением, LazyList предоставит все строки до завершения, но не сгенерирует исключение.
abstract def run(log: ProcessLogger, connectInput: Boolean): Process
Запускает процесс, представленный этим билдером. Стандартный вывод и ошибка отправляются в предоставленный ProcessLogger. Новый запущенный процесс читает из стандартного ввода текущего процесса, если connectInput равно true.
abstract def run(connectInput: Boolean): Process
Запускает процесс, представленный этим билдером. Стандартный вывод и ошибка отправляются в консоль. Новый запущенный процесс читает из стандартного ввода текущего процесса, если connectInput равно true.
abstract def run(io: ProcessIO): Process
Запускает процесс, представленный этим билдером. Ввод/вывод обрабатывается экземпляром ProcessIO.
abstract def run(log: ProcessLogger): Process
Запускает процесс, представленный этим билдером. Стандартный вывод и ошибка отправляются в предоставленный ProcessLogger.
abstract def run(): Process
Запускает процесс, представленный этим билдером. Стандартный вывод и ошибка отправляются в консоль.
abstract def toSink: ProcessBuilder
- Attributes
- protected
- Definition Classes
- Sink
abstract def toSource: ProcessBuilder
- Атрибуты
- protected
- Определяющие классы
- Source
abstract def lineStream(log: ProcessLogger, capacity: Integer): Stream[String]
Запускает процесс, представленный этим билдером. Вывод возвращается как поток, который блокируется, когда строки недоступны, но процесс не завершен. Процесс-производитель будет блокироваться, если заданная емкость строк заполнена без потребления из потока. Стандартный поток ошибок отправляется в предоставленный ProcessLogger. Если процесс завершается с ненулевым значением, поток предоставит все строки до завершения, а затем выбросит исключение.
- Аннотации
- @deprecated
- Устарело
(Начиная с версии 2.13.0) использовать lazyLines
abstract def lineStream(log: ProcessLogger): Stream[String]
Запускает процесс, представленный этим билдером. Вывод возвращается как поток, который блокируется, когда строки недоступны, но процесс не завершен. Стандартный поток ошибок отправляется в предоставленный ProcessLogger. Если процесс завершается с ненулевым значением, поток предоставит все строки до завершения, а затем выбросит исключение.
- Аннотации
- @deprecated
- Устарело
(Начиная с версии 2.13.0) использовать lazyLines
abstract def lineStream(capacity: Integer): Stream[String]
Запускает процесс, представленный этим билдером. Вывод возвращается как поток, который блокируется, когда строки недоступны, но процесс не завершен. Процесс-производитель будет блокироваться, если заданная емкость строк заполнена без потребления из потока. Стандартный поток ошибок отправляется на консоль. Если процесс завершается с ненулевым значением, поток предоставит все строки до завершения, а затем выбросит исключение.
- Аннотации
- @deprecated
- Устарело
(Начиная с версии 2.13.0) использовать lazyLines
abstract def lineStream: Stream[String]
Запускает процесс, представленный этим билдером. Вывод возвращается как поток, который блокируется, когда строки недоступны, но процесс не завершен. Стандартный поток ошибок отправляется на консоль. Если процесс завершается с ненулевым значением, поток предоставит все строки до завершения, а затем выбросит исключение.
- Аннотации
- @deprecated
- Устарело
(Начиная с версии 2.13.0) использовать lazyLines
abstract def lineStream_!(log: ProcessLogger, capacity: Integer): Stream[String]
Запускает процесс, представленный этим билдером. Вывод возвращается как поток, который блокируется, когда строки недоступны, но процесс не завершен. Процесс-производитель будет блокироваться, если заданная емкость строк заполнена без потребления из потока. Стандартный поток ошибок отправляется в предоставленный ProcessLogger. Если процесс завершается с ненулевым значением, поток предоставит все строки до завершения, но не будет выбрасывать исключение.
- Аннотации
- @deprecated
- Устарело
(Начиная с версии 2.13.0) использовать lazyLines_!
abstract def lineStream_!(log: ProcessLogger): Stream[String]
Запускает процесс, представленный этим билдером. Вывод возвращается как поток, который блокируется, когда строки недоступны, но процесс не завершен. Стандартный поток ошибок отправляется в предоставленный ProcessLogger. Если процесс завершается с ненулевым значением, поток предоставит все строки до завершения, но не будет выбрасывать исключение.
- Аннотации
- @deprecated
- Устарело
(Начиная с версии 2.13.0) использовать lazyLines_!
abstract def lineStream_!(capacity: Integer): Stream[String]
Запускает процесс, представленный этим билдером. Вывод возвращается как поток, который блокируется, когда строки недоступны, но процесс не завершен. Процесс-производитель будет блокироваться, если заданная емкость строк заполнена без потребления из потока. Стандартный поток ошибок отправляется на консоль. Если процесс завершается с ненулевым значением, поток предоставит все строки до завершения, но не будет выбрасывать исключение.
- Аннотации
- @deprecated
- Устарело
(Начиная с версии 2.13.0) использовать lazyLines_!
abstract def lineStream_!: Stream[String]
Запускает процесс, представленный этим билдером. Результат возвращается как поток, который блокируется, когда строки недоступны, но процесс еще не завершен. Стандартная ошибка отправляется в консоль. Если процесс завершается с ненулевым значением, поток предоставит все строки до завершения, но не выбросит исключение.
- Аннотации
- @deprecated
- Устарело
(С версии 2.13.0) используйте lazyLines_!
Конкретные члены значения
final def !=(arg0: Any): Boolean
Проверка двух объектов на неравенство.
- returns
trueif !(this == that), false otherwise.
- Определяющие классы
- AnyRef → Any
final def ##(): Int
Эквивалентно x.hashCode за исключением числовых типов в коробках и null. Для чисел возвращает хэш-значение, которое согласуется с равенством значений: если два экземпляра типа значения сравниваются как true, то ## будет генерировать одно и то же хэш-значение для каждого из них. Для null возвращает хэш-код, где null.hashCode вызывает NullPointerException.
- returns
хэш-значение, согласованное с ==
- Определяющие классы
- AnyRef → Any
def #<(b: ProcessBuilder): ProcessBuilder
Считывает вывод scala.sys.process.ProcessBuilder в входной поток этого процесса.
- Определяющие классы
- Sink
def #<(in: => InputStream): ProcessBuilder
Считывает заданный InputStream во входной поток этого процесса. Аргумент передаётся по имени, поэтому поток пересоздаётся, считывается и закрывается каждый раз при выполнении этого процесса.
- Определяющие классы
- Sink
def #<(f: URL): ProcessBuilder
Считывает заданный URL во входной поток этого процесса.
- Определяющие классы
- Sink
def #<(f: File): ProcessBuilder
Считывает заданный файл во входной поток этого процесса.
- Определяющие классы
- Sink
def #>(b: ProcessBuilder): ProcessBuilder
Записывает выходной поток этого процесса в scala.sys.process.ProcessBuilder.
- Определяющие классы
- Source
def #>(out: => OutputStream): ProcessBuilder
Записывает выходной поток этого процесса в заданный OutputStream. Аргумент передаётся по имени, поэтому поток пересоздаётся, записывается и закрывается каждый раз при выполнении этого процесса.
- Определяющие классы
- Source
def #>(f: File): ProcessBuilder
Записывает выходной поток этого процесса в заданный файл.
- Определяющие классы
- Source
def #>>(f: File): ProcessBuilder
Добавляет выходной поток этого процесса к заданному файлу.
- Определяющие классы
- Source
def +(other: String): String
- Неявное
- Этот член добавляется неявным преобразованием из ProcessBuilder в any2stringadd[ProcessBuilder], выполняемым методом any2stringadd в scala.Predef.
- Определяющие классы
- any2stringadd
def ->[B](y: B): (ProcessBuilder, B)
- Неявный
- Этот член добавлен неявным преобразованием из ProcessBuilder вArrowAssoc[ProcessBuilder] с помощью метода ArrowAssoc в scala.Predef.
- Классы определений
- ArrowAssoc
- Аннотации
- @inline()
final def ==(arg0: Any): Boolean
Выражение x == that эквивалентно if (x eq null) that eq null else x.equals(that).
- возвращает
true, если объект-получатель эквивалентен аргументу;falseв противном случае.
- Классы определений
- AnyRef → Any
final def asInstanceOf[T0]: T0
Привести объект-получатель к типу T0.
Обратите внимание, что успех приведения типов во время выполнения определяется семантикой стирания Scala. Поэтому выражение 1.asInstanceOf[String] выбросит ClassCastException во время выполнения, а выражение List(1).asInstanceOf[List[String]] — нет. В последнем примере, поскольку аргумент типа стирается во время компиляции, невозможно проверить, соответствуют ли элементы списка нужному типу.
- возвращает
объект-получатель.
- Классы определений
- Any
- Исключения
ClassCastException, если объект-получатель не является экземпляром стираемого типаT0.
def cat: ProcessBuilder
Возвращает scala.sys.process.ProcessBuilder , представляющий этот Source.
- Классы определений
- Source
def clone(): AnyRef
Создаёт копию объекта-получателя.
По умолчанию реализация метода clone зависит от платформы.
- возвращает
копию объекта-получателя.
def ensuring(cond: (ProcessBuilder) => Boolean, msg: => Any): ProcessBuilder
- Неявный
- Этот член добавлен неявным преобразованием из ProcessBuilder вEnsuring[ProcessBuilder] с помощью метода Ensuring в scala.Predef.
- Классы определений
- Ensuring
def ensuring(cond: (ProcessBuilder) => Boolean): ProcessBuilder
- Неявный
- Этот член добавлен неявным преобразованием из ProcessBuilder вEnsuring[ProcessBuilder] с помощью метода Ensuring в scala.Predef.
- Классы определений
- Ensuring
def ensuring(cond: Boolean, msg: => Any): ProcessBuilder
- Неявный
- Этот член добавлен неявным преобразованием из ProcessBuilder вEnsuring[ProcessBuilder] с помощью метода Ensuring в scala.Predef.
- Классы определений
- Ensuring
def ensuring(cond: Boolean): ProcessBuilder
- Неявный
- Этот член добавлен неявным преобразованием из ProcessBuilder вEnsuring[ProcessBuilder] с помощью метода Ensuring в scala.Predef.
- Классы определений
- Ensuring
final def eq(arg0: AnyRef): Boolean
Проверяет, является ли аргумент (that) ссылкой на объект-получатель (this).
Метод eq реализует отношение эквивалентности на не-null экземплярах AnyRef, и имеет три дополнительных свойства:
-
Он согласован: для любых не-null экземпляров
x и y типа AnyRef, многократные вызовы x.eq(y) последовательно возвращают true или последовательно возвращают false. Для любого не-null экземпляра x типа AnyRef, x.eq(null) и null.eq(x) возвращают false.
null.eq(null) возвращает true. При переопределении методов equals или hashCode важно гарантировать, что их поведение согласуется с равенством ссылок. Поэтому, если два объекта являются ссылками друг на друга (o1 eq o2), они должны быть равны друг другу (o1 == o2) и должны иметь одинаковое значение хэш-кода (o1.hashCode == o2.hashCode).
- возвращает
trueесли аргумент является ссылкой на объект-получатель;falseв противном случае.
- Классы определения
- AnyRef
def equals(arg0: AnyRef): Boolean
Метод равенства для ссылочных типов. Реализация по умолчанию делегирует вызов eq.
См. также equals в scala.Any.
- возвращает
trueесли объект-получатель эквивалентен аргументу;falseв противном случае.
- Классы определения
- AnyRef → Any
def finalize(): Unit
Вызывается сборщиком мусора для объекта-получателя, когда на объект больше нет ссылок.
Подробности о том, когда и если вызывается метод finalize, а также взаимодействие finalize с нелокальными возвратами и исключениями, зависят от платформы.
def formatted(fmtstr: String): String
Возвращает строку, отформатированную согласно заданной строке format. Формат строк соответствует String.format (@see java.lang.String.format).
- Неявный
- Этот член добавлен неявным преобразованием из ProcessBuilder в StringFormat[ProcessBuilder] посредством метода StringFormat в scala.Predef.
- Классы определения
- StringFormat
- Аннотации
- @inline()
final def getClass(): Class[_ <: AnyRef]
Возвращает представление класса объекта во время выполнения.
- возвращает
объект класса, соответствующий типу во время выполнения получателя.
def hashCode(): Int
Метод hashCode для ссылочных типов. См. hashCode в scala.Any.
- возвращает
значение хэш-кода для этого объекта.
final def isInstanceOf[T0]: Boolean
Проверка, является ли динамический тип объекта-получателя T0.
Обратите внимание, что результат проверки модулируется семантикой стирания Scala. Поэтому выражение 1.isInstanceOf[String] вернёт false, а выражение List(1).isInstanceOf[List[String]] вернёт true. В последнем примере, из-за стирания аргумента типа во время компиляции, невозможно проверить, содержат ли элементы списка указанный тип.
- возвращает
trueесли объект-получатель является экземпляром стираемого типаT0;falseв противном случае.
- Классы определения
- Any
final def ne(arg0: AnyRef): Boolean
Эквивалентно !(this eq that).
- возвращает
trueесли аргумент не является ссылкой на объект-получатель;falseв противном случае.
- Классы определения
- AnyRef
final def notify(): Unit
Разбуждает один поток, ожидающий монитор объекта-получателя.
- Классы определения
- AnyRef
- Аннотации
- @native()
- Примечание
не указан SLS в качестве члена AnyRef
final def notifyAll(): Unit
Разбуждает все потоки, ожидающие монитор объекта-получателя.
- Классы определения
- AnyRef
- Аннотации
- @native()
- Примечание
не указан SLS в качестве члена AnyRef
final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
def toString(): String
Создаёт строковое представление этого объекта. По умолчанию представление зависит от платформы. На платформе Java это конкатенация имени класса, «@» и хэш-кода объекта в шестнадцатеричном формате.
- returns
строковое представление объекта.
- Definition Classes
- AnyRef → Any
final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long): Unit
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala/sys/process/ProcessBuilder.html
Представляет последовательность одного или нескольких внешних процессов, которые могут быть выполнены.
ProcessBuilderможет быть единственным внешним процессом или комбинацией другихProcessBuilder. Можно контролировать, куда будет направлен вывод внешнего процесса и откуда будет поступать входной данные, или предоставить это решение тому, кто его запускает.Создать
ProcessBuilderможно через фабрики, предоставленные в scala.sys.process.Process's компаньон-объекте, или неявные преобразования на основе этих фабрик, доступных в пакете scala.sys.process. Вот несколько примеров:import scala.sys.process._ // Executes "ls" and sends output to stdout "ls".! // Execute "ls" and assign a `LazyList[String]` of its output to "contents". val contents = Process("ls").lazyLines // Here we use a `Seq` to make the parameter whitespace-safe def contentsOf(dir: String): String = Seq("ls", dir).!!Методы
ProcessBuilderразделены на три категории: те, которые объединяют дваProcessBuilderдля создания третьего, те, которые перенаправляют вход или выходProcessBuilder, и те, которые выполняют связанные с ним внешние процессы.Объединение
ProcessBuilderДва существующих
ProcessBuilderмогут быть объединены следующим образом:#|.###.#&&и#||выполняют эти задачи.Перенаправление Вход/Выход
Хотя управление входом и выходом можно выполнить при выполнении процесса, есть несколько методов, которые создают новый
ProcessBuilderс предварительно настроенным входом или выходом. Это#<,#>и#>>, и они могут принимать на вход другойProcessBuilder(например, конвейер, описанный выше), или что-то другое, например,java.io.Fileилиjava.io.InputStream. Например:new URL("http://databinder.net/dispatch/About") #> "grep JSON" #>> new File("About_JSON") !Запуск процессов
Для выполнения всех внешних команд, связанных с
ProcessBuilder, можно использовать одну из четырех групп методов. Каждый из этих методов имеет различные перегрузки и вариации, чтобы обеспечить дополнительный контроль над вводом/выводом. Эти методы:run: самый общий метод, он возвращает scala.sys.process.Process немедленно, и внешняя команда выполняется асинхронно.!: блокируется до тех пор, пока все внешние команды не завершатся, и возвращает код выхода последней из цепочки выполнения.!!: блокируется до тех пор, пока все внешние команды не завершатся, и возвращаетStringс сгенерированным выводом.lazyLines: возвращается немедленно, какrun, и генерируемый вывод предоставляется черезLazyList[String]. Получение следующего элемента этогоLazyListможет блокироваться до тех пор, пока он не станет доступным. Этот метод выбросит исключение, если код возврата отличается от нуля — если этого не нужно, используйте методlazyLines_!.Обработка ввода и вывода
Если не указано иное, вход внешних команд, выполняемых с помощью
runили!, не будет связан ни с чем, а вывод будет перенаправлен в стандартный вывод (stdout) и стандартную ошибку (stderr) процесса Scala. Для методов!!иlazyLinesвход не будет предоставлен, а вывод будет направлен в соответствии с семантикой этих методов.Некоторые методы будут использовать стандартный ввод (stdin) в качестве входных данных. Вывод можно контролировать с помощью scala.sys.process.ProcessLogger —
!!иlazyLinesбудут перенаправлять только вывод ошибок, если передатьProcessLogger. Если требуется полный контроль над вводом и выводом, то можно использовать scala.sys.process.ProcessIO сrun.Например, можно отключить вывод ошибок из
lazyLines_!следующим образом:Расширенный пример
Давайте подробно рассмотрим один пример использования:
import scala.sys.process._ "find src -name *.scala -exec grep null {} ;" #| "xargs test -z" #&& "echo null-free" #|| "echo null detected" !Обратите внимание, что каждый
Stringнеявным образом преобразуется вProcessBuilderчерез неявные преобразования, импортированные из scala.sys.process. ЭтиProcessBuilderзатем объединяются тремя различными способами.#|перенаправляет вывод первой команды на вход второй команды. Это отражает конвейер оболочки (|).#&&условно выполняет вторую команду, если предыдущая завершилась с кодом выхода 0. Это отражает условное выполнение оболочки (&&).#||условно выполняет третью команду, если код выхода предыдущей команды отличается от нуля. Это отражает условное выполнение оболочки (||).Наконец,
!в конце выполняет команды и возвращает код выхода. Всё, что будет выведено, будет отправлено в стандартный вывод процесса Scala. Если бы мы хотели это захватить, мы могли бы запустить это с помощью!!вместо этого.Примечание: хотя это не показано выше, эквивалентом конвейера оболочки было бы
;.