pub enum ShellKind {
Posix,
Csh,
Tcsh,
Rc,
Fish,
PowerShell,
Pwsh,
Nushell,
Cmd,
Xonsh,
Elvish,
}Variants§
Posix
Csh
Tcsh
Rc
Fish
PowerShell
Pre-installed “legacy” powershell for windows
Pwsh
PowerShell 7.x
Nushell
Cmd
Xonsh
Elvish
Implementations§
Source§impl ShellKind
impl ShellKind
pub fn system() -> Self
Sourcepub fn supports_posix_chaining(&self) -> bool
pub fn supports_posix_chaining(&self) -> bool
Returns whether this shell’s command chaining syntax can be parsed by brush-parser.
This is used to determine if we can safely parse shell commands to extract sub-commands for security purposes (e.g., preventing shell injection in “always allow” patterns).
The brush-parser handles ; (sequential execution) and | (piping), which are
supported by all common shells. It also handles && and || for conditional
execution, $() and backticks for command substitution, and process substitution.
§Shell Notes
- Nushell: Uses
;for sequential execution. Theand/orkeywords are boolean operators on values (e.g.,$true and $false), not command chaining operators. - Elvish: Uses
;to separate pipelines, which brush-parser handles. Elvish does not have&&or||operators. Itsand/orare special commands that operate on values, not command chaining (e.g.,and $true $false). - Rc (Plan 9): Uses
;for sequential execution and|for piping. Does not have&&/||operators for conditional chaining. All current shell variants are listed here because brush-parser can handle their syntax. If a newShellKindvariant is added, evaluate whether brush-parser can safely parse its command chaining syntax before including it. Omitting a variant will causetool_permissions::from_inputto deny terminal commands that havealways_allowpatterns configured.
pub fn new(program: impl AsRef<Path>, is_windows: bool) -> Self
pub fn to_shell_variable(self, input: &str) -> String
pub fn args_for_shell( &self, interactive: bool, combined_command: String, ) -> Vec<String>
pub const fn command_prefix(&self) -> Option<char>
pub fn prepend_command_prefix<'a>(&self, command: &'a str) -> Cow<'a, str>
pub const fn sequential_commands_separator(&self) -> char
pub const fn sequential_and_commands_separator(&self) -> &'static str
pub fn try_quote<'a>(&self, arg: &'a str) -> Option<Cow<'a, str>>
pub fn quote_powershell(arg: &str) -> Cow<'_, str>
pub fn quote_pwsh(arg: &str) -> Cow<'_, str>
pub fn quote_cmd(arg: &str) -> Cow<'_, str>
Sourcepub fn try_quote_prefix_aware<'a>(&self, arg: &'a str) -> Option<Cow<'a, str>>
pub fn try_quote_prefix_aware<'a>(&self, arg: &'a str) -> Option<Cow<'a, str>>
Quotes the given argument if necessary, taking into account the command prefix.
In other words, this will consider quoting arg without its command prefix to not break the command.
You should use this over try_quote when you want to quote a shell command.
pub fn split(&self, input: &str) -> Option<Vec<String>>
pub const fn activate_keyword(&self) -> &'static str
pub const fn clear_screen_command(&self) -> &'static str
Trait Implementations§
Source§impl<'de> Deserialize<'de> for ShellKind
impl<'de> Deserialize<'de> for ShellKind
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Copy for ShellKind
impl Eq for ShellKind
impl StructuralPartialEq for ShellKind
Auto Trait Implementations§
impl Freeze for ShellKind
impl RefUnwindSafe for ShellKind
impl Send for ShellKind
impl Sync for ShellKind
impl Unpin for ShellKind
impl UnsafeUnpin for ShellKind
impl UnwindSafe for ShellKind
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.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