package b0
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha512=e9aa779e66c08fc763019f16d4706f465d16c05d6400b58fbd0313317ef33ddea51952e2b058db28e65f7ddb7012f328c8bf02d8f1da17bb543348541a2587f0
doc/b0.std/B0_std/Os/Cmd/index.html
Module Os.Cmd
Source
Executing commands.
Tool search
path_search ~win_exe ~path () cmd
searches the tool of cmd
in the path
directories. If the tool:
- Has a single path segment: that filename is searched, in list order, for the first matching executable file in the directories of
path
.path
defaults to the environment variablePATH
parsed withFpath.list_of_search_path
. - Has multiple path segments: the file path is simply tested for existence and executability and
cmd
is returned if that is the case (possibly by altered by thewin_exe
behaviour, see below). If the path is relative it is tested relative to the process' current working directory.
If win_exe
is true
(defaults to Stdlib.Sys.win32
) an .exe
suffix is added to the command's tool if it doesn't already have one. .
find ~search cmd
is cmd
with its B0_std.Cmd.tool
resolved to the executable file for the tool specified by cmd
using search
(defaults to path_search ()
) or Ok None
if the tool cannot be found.
find_first ?search cmds
is List.find_map (find ?search) cmds
.
get
is like find
except but return an error message if Ok None
is returned.
get_first_tool cmds
is the first command of cmds
that can be found with find
or an error if none is found.
Process completion statuses
The type for process exit statuses.
pp_status
is a formatter for process exit statuses of the form:
"exited %d"
for`Exited _
values"signaled %s"
for`Signaled _
value
pp_cmd_status
is a formatter for command process exit statuses of the form: "cmd [%a]: %a"
.
Process standard inputs
The type for representing the standard input of a process.
in_fd ~close fd
is a standard input that reads from file descriptor fd
. If close
is true
, fd
is closed after the process is spawn.
in_stdin
is in_fd ~close:false Unix.stdin
, a standard input that reads from the current process standard input.
Process standard outputs
The type for representing the standard output of a process.
out_file ~force ~make_path file
is a standard output that writes to file file
.
- If
make_path
istrue
and the parent directory offile
does not exist the whole path to the parent is created as needed with permission0o755
(readable and traversable by everyone, writable by the user). - If
force
istrue
andfile
exists at call time as a regular file it tries to overwrite it, in all other cases the function errors iffile
exists. mode
are the permissions of the written file; they default to0o644
, readable by everyone, writable by the user.
out_fd ~close fd
is a standard output that writes to file descriptor fd
. If close
is true
, fd
is closed after the process spawn.
Command execution
Blocking
These functions wait for the command to complete before proceeding.
val run_status :
?env:Env.assignments ->
?cwd:Fpath.t ->
?stdin:stdi ->
?stdout:stdo ->
?stderr:stdo ->
Cmd.t ->
(status, string) result
run_status ~env ~cwd ~stdin ~stdout ~stderr cmd
runs and waits for the completion of cmd
in environment env
with current directory cwd
and standard IO connections stdin
, stdout
and stderr
.
env
defaults toEnv.current_assignments
()
cwd
defaults toDir.cwd
()
stdin
defaults toin_stdin
stdout
defaults toout_stdout
stderr
defaults toout_stderr
val run_status_out :
?env:Env.assignments ->
?cwd:Fpath.t ->
?stdin:stdi ->
?stderr:[ `Stdo of stdo | `Out ] ->
trim:bool ->
Cmd.t ->
(status * string, string) result
run_status_out
is like run_status
except stdout
is read from the process to a string. The string is String.trim
ed if trim
is true
(default). If stderr
is `Out
the process' stderr
is redirected to stdout
and thus read back in the string aswell.
val run :
?env:Env.assignments ->
?cwd:Fpath.t ->
?stdin:stdi ->
?stdout:stdo ->
?stderr:stdo ->
Cmd.t ->
(unit, string) result
run
is run_status
with non-`Exited 0
statuses turned into errors via pp_cmd_status
.
val run_out :
?env:Env.assignments ->
?cwd:Fpath.t ->
?stdin:stdi ->
?stderr:[ `Stdo of stdo | `Out ] ->
trim:bool ->
Cmd.t ->
(string, string) result
run_out
is run_status_out
with non-`Exited 0
statuses reporting the captured output (if any) prefixed by pp_cmd_status
.
Non-blocking
Note. In contrast to waitpid(2)
the following API does not allow to collect any child process completion. There are two reasons: first this is not supported on Windows, second this is anti-modular.
The type for process identifiers.
pid_to_int pid
is the system identifier for process identifier pid
.
val spawn :
?env:Env.assignments ->
?cwd:Fpath.t ->
?stdin:stdi ->
?stdout:stdo ->
?stderr:stdo ->
Cmd.t ->
(pid, string) result
spawn ~env ~cwd ~stdin ~stdout ~stderr cmd
spawns command cmd
in environment env
with current directory cwd
and standard IO connections stdin
, stdout
and stderr
. env
defaults to Env.current_assignments
()
, cwd
to Dir.cwd
()
, stdin
to in_stdin
, stdout
to out_stdout
and stderr
to out_stderr
.
spawn_poll_status pid
tries to collect the exit status of command spawn pid
. If block
is false
, Ok None
is immediately returned if pid
has not terinated yet.
spawn_wait_status
blocks and waits for pid
's termination status to become available.
spawn_wait
is like spawn_wait_status
but with non-`Exited 0
statuses turned into errors with pp_cmd_status
kill pid signal
sends signal signal
to the process pid
.
Windows. Only the Sys.sigkill
signal is emulated.
Tracing
type spawn_tracer =
pid option ->
Env.assignments option ->
cwd:Fpath.t option ->
Cmd.t ->
unit
The type for spawn tracers. Called with each blocking and non-blocking spawned command aswell as execv
. The function is given the process identifier of the spawn (or None
in case of execv
), the environment if different from the program's one, the current working directory if different from the program's one and the actual command.
spawn_tracer_nop
is a spawn tracer that does nothing.
spawn_tracer_log level
is a spawn tracer that logs with level level
. If level
is Log.level.Quiet
this is spawn_tracer_nop
.
tracer ()
is the current spawn tracer. Initially this is spawn_tracer_log Log.Debug
.
set_tracer t
sets the current spawn tracer to t
.
Executing files
Windows. On Windows a program executing an execv*
function yields back control to the terminal as soon as the child starts (vs. ends on POSIX). This entails all sorts of unwanted behaviours. To workaround this, the following function executes, on Windows, the file as a spawned child process which is waited on for completion via waitpid(2)
. Once the child process has terminated the calling process is immediately exit
ed with the status of the child.
val execv :
?env:Env.assignments ->
?cwd:Fpath.t ->
?argv0:string ->
Cmd.t ->
('a, string) result
execv ~env ~cwd cmd
executes the realpath pointed by B0_std.Cmd.tool
cmd
as a new process in environment with cmd
as the Sys.argv
of this process. The function only returns in case of error. env
defaults to B0_std.Os.Env.current_assignments
()
, cwd
to B0_std.Os.Dir.cwd
()
. If argv0
is specified it is used instead of cmd
's tool for Sys.argv.(0).
Exit
needs that alias to refer to B0_std.Cmd.t
.