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>
pub fn new() -> Result<Shell>
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: AsRef<Path>>(&self, dir: P)
pub fn change_dir<P: AsRef<Path>>(&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: AsRef<Path>>(&self, path: P) -> PushDir<'_>
pub fn push_dir<P: AsRef<Path>>(&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: AsRef<OsStr>, V: AsRef<OsStr>>(&self, key: K, val: V)
pub fn set_var<K: AsRef<OsStr>, V: AsRef<OsStr>>(&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: AsRef<OsStr>, V: AsRef<OsStr>>(
&self,
key: K,
val: V,
) -> PushEnv<'_>
pub fn push_env<K: AsRef<OsStr>, V: AsRef<OsStr>>( &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: AsRef<Path>>(&self, path: P) -> Result<String>
pub fn read_file<P: AsRef<Path>>(&self, path: P) -> Result<String>
Read the entire contents of a file into a string.
Sourcepub fn read_binary_file<P: AsRef<Path>>(&self, path: P) -> Result<Vec<u8>>
pub fn read_binary_file<P: AsRef<Path>>(&self, path: P) -> Result<Vec<u8>>
Read the entire contents of a file into a vector of bytes.
Sourcepub fn read_dir<P: AsRef<Path>>(&self, path: P) -> Result<Vec<PathBuf>>
pub fn read_dir<P: AsRef<Path>>(&self, path: P) -> Result<Vec<PathBuf>>
Returns a sorted list of paths directly contained in the directory at
path
.
Sourcepub fn write_file<P: AsRef<Path>, C: AsRef<[u8]>>(
&self,
path: P,
contents: C,
) -> Result<()>
pub fn write_file<P: AsRef<Path>, C: AsRef<[u8]>>( &self, path: P, contents: C, ) -> Result<()>
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: AsRef<Path>, D: AsRef<Path>>(
&self,
src: S,
dst: D,
) -> Result<()>
pub fn copy_file<S: AsRef<Path>, D: AsRef<Path>>( &self, src: S, dst: D, ) -> Result<()>
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 hard_link<S: AsRef<Path>, D: AsRef<Path>>(
&self,
src: S,
dst: D,
) -> Result<()>
pub fn hard_link<S: AsRef<Path>, D: AsRef<Path>>( &self, src: S, dst: D, ) -> Result<()>
Hardlinks src
to dst
.
Sourcepub fn create_dir<P: AsRef<Path>>(&self, path: P) -> Result<PathBuf>
pub fn create_dir<P: AsRef<Path>>(&self, path: P) -> Result<PathBuf>
Creates the specified directory.
All intermediate directories will also be created.
Sourcepub fn create_temp_dir(&self) -> Result<TempDir>
pub fn create_temp_dir(&self) -> Result<TempDir>
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: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn remove_path<P: AsRef<Path>>(&self, path: P) -> Result<()>
Removes the file or directory at the given path.
Sourcepub fn path_exists<P: AsRef<Path>>(&self, path: P) -> bool
pub fn path_exists<P: AsRef<Path>>(&self, path: P) -> bool
Returns whether a file or directory exists at the given path.