pub struct Shell { /* private fields */ }
Expand description
A Shell
is the main API entry point.
Almost all of the crate’s functionality is available as methods of the
Shell
object.
Shell
is a stateful object. It maintains a logical working directory and
an environment map. They are independent from process’s
std::env::current_dir
and std::env::var
, and only affect paths and
commands passed to the Shell
.
By convention, variable holding the shell is named sh
.
§Example
use xshell::{cmd, Shell};
let sh = Shell::new()?;
let _d = sh.push_dir("./target");
let cwd = sh.current_dir();
cmd!(sh, "echo current dir is {cwd}").run()?;
let process_cwd = std::env::current_dir().unwrap();
assert_eq!(cwd, process_cwd.join("./target"));
Implementations§
Source§impl Shell
impl Shell
Sourcepub fn new() -> Result<Shell, Error>
pub fn new() -> Result<Shell, Error>
Creates a new Shell
.
Fails if std::env::current_dir
returns an error.
Sourcepub fn current_dir(&self) -> PathBuf
pub fn current_dir(&self) -> PathBuf
Returns the working directory for this Shell
.
All relative paths are interpreted relative to this directory, rather
than std::env::current_dir
.
Sourcepub fn change_dir<P>(&self, dir: P)
pub fn change_dir<P>(&self, dir: P)
Changes the working directory for this Shell
.
Note that this doesn’t affect std::env::current_dir
.
Sourcepub fn push_dir<P>(&self, path: P) -> PushDir<'_>
pub fn push_dir<P>(&self, path: P) -> PushDir<'_>
Temporary changes the working directory of this Shell
.
Returns a RAII guard which reverts the working directory to the old value when dropped.
Note that this doesn’t affect std::env::current_dir
.
Sourcepub fn set_var<K, V>(&self, key: K, val: V)
pub fn set_var<K, V>(&self, key: K, val: V)
Sets the value of key
environment variable for this Shell
to
val
.
Note that this doesn’t affect std::env::var
.
Sourcepub fn push_env<K, V>(&self, key: K, val: V) -> PushEnv<'_>
pub fn push_env<K, V>(&self, key: K, val: V) -> PushEnv<'_>
Temporary sets the value of key
environment variable for this
Shell
to val
.
Returns a RAII guard which restores the old environment when dropped.
Note that this doesn’t affect std::env::var
.
Sourcepub fn read_file<P>(&self, path: P) -> Result<String, Error>
pub fn read_file<P>(&self, path: P) -> Result<String, Error>
Read the entire contents of a file into a string.
Sourcepub fn read_binary_file<P>(&self, path: P) -> Result<Vec<u8>, Error>
pub fn read_binary_file<P>(&self, path: P) -> Result<Vec<u8>, Error>
Read the entire contents of a file into a vector of bytes.
Sourcepub fn read_dir<P>(&self, path: P) -> Result<Vec<PathBuf>, Error>
pub fn read_dir<P>(&self, path: P) -> Result<Vec<PathBuf>, Error>
Returns a sorted list of paths directly contained in the directory at
path
.
Sourcepub fn write_file<P, C>(&self, path: P, contents: C) -> Result<(), Error>
pub fn write_file<P, C>(&self, path: P, contents: C) -> Result<(), Error>
Write a slice as the entire contents of a file.
This function will create the file and all intermediate directories if they don’t exist.
Sourcepub fn copy_file<S, D>(&self, src: S, dst: D) -> Result<(), Error>
pub fn copy_file<S, D>(&self, src: S, dst: D) -> Result<(), Error>
Copies src
into dst
.
src
must be a file, but dst
need not be. If dst
is an existing
directory, src
will be copied into a file in the dst
directory whose
name is same as that of src
.
Otherwise, dst
is a file or does not exist, and src
will be copied into
it.
Sourcepub fn create_dir<P>(&self, path: P) -> Result<PathBuf, Error>
pub fn create_dir<P>(&self, path: P) -> Result<PathBuf, Error>
Creates the specified directory.
All intermediate directories will also be created.
Sourcepub fn create_temp_dir(&self) -> Result<TempDir, Error>
pub fn create_temp_dir(&self) -> Result<TempDir, Error>
Creates an empty named world-readable temporary directory.
Returns a TempDir
RAII guard with the path to the directory. When
dropped, the temporary directory and all of its contents will be
removed.
Note that this is an insecure method – any other process on the system will be able to read the data.
Sourcepub fn remove_path<P>(&self, path: P) -> Result<(), Error>
pub fn remove_path<P>(&self, path: P) -> Result<(), Error>
Removes the file or directory at the given path.
Sourcepub fn path_exists<P>(&self, path: P) -> bool
pub fn path_exists<P>(&self, path: P) -> bool
Returns whether a file or directory exists at the given path.
Trait Implementations§
impl RefUnwindSafe for Shell
impl UnwindSafe for Shell
Auto Trait Implementations§
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more