Skip to main content

Shell

Trait Shell 

Source
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§

Source

fn set_env_var( &self, f: &mut impl Write, env_var: &str, value: &str, ) -> Result<(), ShellError>

Set an env var by export-ing it.

Source

fn unset_env_var( &self, f: &mut impl Write, env_var: &str, ) -> Result<(), ShellError>

Unset an env var by unset-ing it.

Source

fn run_script(&self, f: &mut impl Write, path: &Path) -> Result<(), ShellError>

Run a script in the current shell.

Source

fn extension(&self) -> &str

The extension that shell scripts for this interpreter usually use.

Source

fn executable(&self) -> &str

The executable that can be called to start this shell.

Source

fn create_run_script_command(&self, path: &Path) -> Command

Constructs a Command that will execute the specified script by this shell.

Provided Methods§

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

fn path_separator(&self, platform: &Platform) -> &str

Path separator

Source

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.

Source

fn format_env_var(&self, var_name: &str) -> String

Format the environment variable for the shell.

Source

fn echo(&self, f: &mut impl Write, text: &str) -> Result

Emits echoing certain text to stdout.

Source

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.

Source

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.

Source

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.

Source

fn line_ending(&self) -> &str

Get the line ending for this shell. Only CmdExe uses \r\n.

Source

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()).

Source

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 restore
  • backup_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".

Implementors§