pub trait Shell {
Show 21 methods
// Required methods
fn set_env_var(
&self,
f: &mut impl Write,
env_var: &str,
value: &str,
) -> Result<(), ShellError>;
fn unset_env_var(
&self,
f: &mut impl Write,
env_var: &str,
) -> Result<(), ShellError>;
fn run_script(
&self,
f: &mut impl Write,
path: &Path,
) -> Result<(), ShellError>;
fn extension(&self) -> &str;
fn executable(&self) -> &str;
fn create_run_script_command(&self, path: &Path) -> Command;
// Provided methods
fn force_utf8(&self, _f: &mut impl Write) -> Result<(), ShellError> { ... }
fn source_completions(
&self,
_f: &mut impl Write,
_completions_dir: &Path,
) -> Result<(), ShellError> { ... }
fn can_run_script(&self, path: &Path) -> bool { ... }
fn run_command<'a>(
&self,
f: &mut impl Write,
command: impl IntoIterator<Item = &'a str> + 'a,
) -> Result { ... }
fn set_path(
&self,
f: &mut impl Write,
paths: &[PathBuf],
modification_behavior: PathModificationBehavior,
platform: &Platform,
) -> Result<(), ShellError> { ... }
fn path_separator(&self, platform: &Platform) -> &str { ... }
fn path_var(&self, platform: &Platform) -> &str { ... }
fn format_env_var(&self, var_name: &str) -> String { ... }
fn echo(&self, f: &mut impl Write, text: &str) -> Result { ... }
fn print_env(&self, f: &mut impl Write) -> Result { ... }
fn write_script(&self, f: &mut impl Write, script: &str) -> Result<()> { ... }
fn parse_env<'i>(&self, env: &'i str) -> HashMap<&'i str, &'i str> { ... }
fn line_ending(&self) -> &str { ... }
fn completion_script_location(&self) -> Option<&'static Path> { ... }
fn restore_env_var(
&self,
f: &mut impl Write,
key: &str,
backup_key: &str,
) -> Result<(), ShellError> { ... }
}Expand description
A trait for generating shell scripts. The trait is implemented for each shell individually.
§Example
use std::path::PathBuf;
use rattler_shell::shell::Bash;
use rattler_shell::shell::Shell;
let mut script = String::new();
let shell = Bash::default();
shell.set_env_var(&mut script, "FOO", "bar").unwrap();
assert_eq!(script, "export FOO=bar\n");Required Methods§
Sourcefn set_env_var(
&self,
f: &mut impl Write,
env_var: &str,
value: &str,
) -> Result<(), ShellError>
fn set_env_var( &self, f: &mut impl Write, env_var: &str, value: &str, ) -> Result<(), ShellError>
Set an env var by export-ing it.
Sourcefn unset_env_var(
&self,
f: &mut impl Write,
env_var: &str,
) -> Result<(), ShellError>
fn unset_env_var( &self, f: &mut impl Write, env_var: &str, ) -> Result<(), ShellError>
Unset an env var by unset-ing it.
Sourcefn run_script(&self, f: &mut impl Write, path: &Path) -> Result<(), ShellError>
fn run_script(&self, f: &mut impl Write, path: &Path) -> Result<(), ShellError>
Run a script in the current shell.
Sourcefn executable(&self) -> &str
fn executable(&self) -> &str
The executable that can be called to start this shell.
Sourcefn create_run_script_command(&self, path: &Path) -> Command
fn create_run_script_command(&self, path: &Path) -> Command
Constructs a Command that will execute the specified script by this
shell.
Provided Methods§
Sourcefn force_utf8(&self, _f: &mut impl Write) -> Result<(), ShellError>
fn force_utf8(&self, _f: &mut impl Write) -> Result<(), ShellError>
Write a command to the script that forces the usage of UTF8-encoding for the shell script.
Sourcefn source_completions(
&self,
_f: &mut impl Write,
_completions_dir: &Path,
) -> Result<(), ShellError>
fn source_completions( &self, _f: &mut impl Write, _completions_dir: &Path, ) -> Result<(), ShellError>
Source completion scripts for the shell from a given prefix path.
Note: the completions_dir is the directory where the completions are
stored. You can use Self::completion_script_location to get the
correct location for a given shell type.
Sourcefn can_run_script(&self, path: &Path) -> bool
fn can_run_script(&self, path: &Path) -> bool
Test to see if the path can be executed by the shell, based on the extension of the path.
Sourcefn run_command<'a>(
&self,
f: &mut impl Write,
command: impl IntoIterator<Item = &'a str> + 'a,
) -> Result
fn run_command<'a>( &self, f: &mut impl Write, command: impl IntoIterator<Item = &'a str> + 'a, ) -> Result
Executes a command in the current shell. Use Self::run_script when
you want to run another shell script.
Sourcefn set_path(
&self,
f: &mut impl Write,
paths: &[PathBuf],
modification_behavior: PathModificationBehavior,
platform: &Platform,
) -> Result<(), ShellError>
fn set_path( &self, f: &mut impl Write, paths: &[PathBuf], modification_behavior: PathModificationBehavior, platform: &Platform, ) -> Result<(), ShellError>
Set the PATH variable to the given paths.
Sourcefn path_separator(&self, platform: &Platform) -> &str
fn path_separator(&self, platform: &Platform) -> &str
Path separator
Sourcefn path_var(&self, platform: &Platform) -> &str
fn path_var(&self, platform: &Platform) -> &str
Returns the name of the PATH variable for the given platform. On Windows, path variables are case-insensitive but not all shells treat them case-insensitive.
Sourcefn format_env_var(&self, var_name: &str) -> String
fn format_env_var(&self, var_name: &str) -> String
Format the environment variable for the shell.
Sourcefn print_env(&self, f: &mut impl Write) -> Result
fn print_env(&self, f: &mut impl Write) -> Result
Emits writing all current environment variables to stdout.
Records are NUL-separated (env -0) rather than newline-separated
so that values which themselves contain newlines survive the
round-trip through Shell::parse_env.
Sourcefn write_script(&self, f: &mut impl Write, script: &str) -> Result<()>
fn write_script(&self, f: &mut impl Write, script: &str) -> Result<()>
Write the script to the writer and do some post-processing for line-endings. Only really relevant for cmd.exe scripts.
Sourcefn parse_env<'i>(&self, env: &'i str) -> HashMap<&'i str, &'i str>
fn parse_env<'i>(&self, env: &'i str) -> HashMap<&'i str, &'i str>
Parses environment variables emitted by Shell::print_env.
The default implementation expects NUL-separated KEY=VALUE
records (see Shell::print_env), so a value containing a
newline is kept intact instead of being cut at the newline.
Sourcefn line_ending(&self) -> &str
fn line_ending(&self) -> &str
Get the line ending for this shell. Only CmdExe uses \r\n.
Sourcefn completion_script_location(&self) -> Option<&'static Path>
fn completion_script_location(&self) -> Option<&'static Path>
Return the location where completion scripts are found in a Conda environment.
- bash:
share/bash-completion/completions - zsh:
share/zsh/site-functions - fish:
share/fish/vendor_completions.d
The return value must be joined with
prefix.join(completion_script_location()).
Sourcefn restore_env_var(
&self,
f: &mut impl Write,
key: &str,
backup_key: &str,
) -> Result<(), ShellError>
fn restore_env_var( &self, f: &mut impl Write, key: &str, backup_key: &str, ) -> Result<(), ShellError>
Restores an environment variable from its backup if it exists, otherwise unsets it.
§Arguments
key- The name of the environment variable to restorebackup_key- The name of the backup environment variable
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".