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.