sig
  type 'a with_process_flags =
      ?use_extra_path:bool ->
      ?timeout:Core.Std.Time.Span.t option ->
      ?working_dir:string ->
      ?setuid:int ->
      ?setgid:int ->
      ?env:[ `Extend of (string * string) list
           | `Replace of (string * string) list ] ->
      ?verbose:bool -> ?echo:bool -> ?input:string -> ?keep_open:bool -> 'a
  type 'a with_run_flags = ?expect:int list -> 'Shell.with_process_flags
  type 'a cmd = string -> string list -> 'a
  val run : unit Shell.cmd Shell.with_run_flags
  val run_lines : ?eol:char -> string list Shell.cmd Shell.with_run_flags
  val run_one : ?eol:char -> string option Shell.cmd Shell.with_run_flags
  val run_one_exn : ?eol:char -> string Shell.cmd Shell.with_run_flags
  val run_full : string Shell.cmd Shell.with_run_flags
  val run_fold :
    ?eol:char ->
    init:'->
    f:('-> string -> 'a * [ `Continue | `Stop ]) ->
    'Shell.cmd Shell.with_run_flags
  type ('a, 'ret) sh_cmd = ('a, unit, string, 'ret) Pervasives.format4 -> 'a
  val sh : ('a, unit) Shell.sh_cmd Shell.with_run_flags
  val sh_lines : ('a, string list) Shell.sh_cmd Shell.with_run_flags
  val sh_full : ('a, string) Shell.sh_cmd Shell.with_run_flags
  val sh_one : ('a, string option) Shell.sh_cmd Shell.with_run_flags
  val sh_one_exn : ('a, string) Shell.sh_cmd Shell.with_run_flags
  val noninteractive_ssh_options : string list
  val noninteractive_no_hostkey_checking_options : string list
  type 'a with_ssh_flags =
      ?ssh_options:string list -> ?user:string -> host:string -> 'a
  val ssh : ('a, unit) Shell.sh_cmd Shell.with_run_flags Shell.with_ssh_flags
  val ssh_lines :
    ('a, string list) Shell.sh_cmd Shell.with_run_flags Shell.with_ssh_flags
  val ssh_full :
    ('a, string) Shell.sh_cmd Shell.with_run_flags Shell.with_ssh_flags
  val ssh_one :
    ('a, string option) Shell.sh_cmd Shell.with_run_flags
    Shell.with_ssh_flags
  val ssh_one_exn :
    ('a, string) Shell.sh_cmd Shell.with_run_flags Shell.with_ssh_flags
  type 'a with_test_flags =
      ?true_v:int list -> ?false_v:int list -> 'Shell.with_process_flags
  val test : bool Shell.cmd Shell.with_test_flags
  val sh_test : ('a, bool) Shell.sh_cmd Shell.with_test_flags
  val ssh_test :
    ('a, bool) Shell.sh_cmd Shell.with_test_flags Shell.with_ssh_flags
  val extra_path : string list Pervasives.ref
  module Process :
    sig
      type status =
          [ `Exited of int
          | `Signaled of Core.Std.Signal.t
          | `Timeout of Core.Std.Time.Span.t ]
      type t
      type result = {
        command : Shell.Process.t;
        status : Shell.Process.status;
        stdout : string;
        stderr : string;
      }
      exception Failed of Shell.Process.result
      val to_string : Shell.Process.t -> string
      val status_to_string : Shell.Process.status -> string
      val set_defaults :
        ?timeout:Core.Std.Time.Span.t option ->
        ?verbose:bool -> ?echo:bool -> unit -> unit
      val format_failed : Shell.Process.result -> string
      val cmd : string -> string list -> Shell.Process.t
      val shell : string -> Shell.Process.t
      val remote :
        ?ssh_options:string list ->
        ?quote_args:bool ->
        ?user:string -> host:string -> Shell.Process.t -> Shell.Process.t
      type 'a reader
      val content : string Shell.Process.reader
      val discard : unit Shell.Process.reader
      val lines : ?eol:char -> unit -> string list Shell.Process.reader
      val head : ?eol:char -> unit -> string option Shell.Process.reader
      exception Empty_head
      val head_exn : ?eol:char -> unit -> string Shell.Process.reader
      val callback :
        add:(string -> int -> unit) ->
        flush:(unit -> unit) -> unit Shell.Process.reader
      val run :
        (Shell.Process.t -> 'Shell.Process.reader -> 'a)
        Shell.with_run_flags
      val run_k :
        ((Shell.Process.t -> 'Shell.Process.reader -> 'a) -> 'b) ->
        'Shell.with_run_flags
      val test : (Shell.Process.t -> bool) Shell.with_test_flags
      val test_k :
        ((Shell.Process.t -> bool) -> 'a) -> 'Shell.with_test_flags
    end
  val mkdir : ?p:unit -> ?perm:int -> string -> unit
  val cp :
    ?overwrite:bool ->
    ?perm:Core.Std.Unix.file_perm -> string -> string -> unit
  val ln : ?s:unit -> ?f:unit -> string -> string -> unit
  val rm : ?r:unit -> ?f:unit -> string -> unit
  val mv : string -> string -> unit
  val whoami : ?real:bool -> unit -> string
  val which : ?use_extra_path:bool -> string -> string option
  val scp :
    ?compress:bool ->
    ?recurse:bool -> ?user:string -> host:string -> string -> string -> unit
  val ounit_tests : unit -> OUnit.test
end