forked from extern/nushell
Use better quoting for commandline args (#5271)
This commit is contained in:
parent
ded9d1cedb
commit
96253c69fb
@ -22,7 +22,10 @@ pub fn evaluate_commands(
|
||||
let (block, delta) = {
|
||||
let mut working_set = StateWorkingSet::new(engine_state);
|
||||
|
||||
let (input, _) = if commands.item.starts_with('\'') || commands.item.starts_with('"') {
|
||||
let (input, _) = if commands.item.starts_with('\'')
|
||||
|| commands.item.starts_with('"')
|
||||
|| commands.item.starts_with('`')
|
||||
{
|
||||
(
|
||||
trim_quotes(commands.item.as_bytes()),
|
||||
commands.span.start + 1,
|
||||
|
@ -512,6 +512,7 @@ fn trim_enclosing_quotes(input: &str) -> String {
|
||||
match (chars.next(), chars.next_back()) {
|
||||
(Some('"'), Some('"')) => chars.collect(),
|
||||
(Some('\''), Some('\'')) => chars.collect(),
|
||||
(Some('`'), Some('`')) => chars.collect(),
|
||||
_ => input.to_string(),
|
||||
}
|
||||
}
|
||||
|
@ -83,13 +83,13 @@ fn main() -> Result<()> {
|
||||
for arg in std::env::args().skip(1) {
|
||||
if !script_name.is_empty() {
|
||||
args_to_script.push(if arg.contains(' ') {
|
||||
format!("'{}'", arg)
|
||||
format!("`{}`", arg)
|
||||
} else {
|
||||
arg
|
||||
});
|
||||
} else if collect_arg_nushell {
|
||||
args_to_nushell.push(if arg.contains(' ') {
|
||||
format!("'{}'", arg)
|
||||
format!("`{}`", arg)
|
||||
} else {
|
||||
arg
|
||||
});
|
||||
|
@ -297,6 +297,15 @@ mod nu_commands {
|
||||
|
||||
assert_eq!(actual.out, "foo");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn better_arg_quoting() {
|
||||
let actual = nu!(cwd: ".", r#"
|
||||
nu -c "\# '"
|
||||
"#);
|
||||
|
||||
assert_eq!(actual.out, "");
|
||||
}
|
||||
}
|
||||
|
||||
mod nu_script {
|
||||
|
Loading…
Reference in New Issue
Block a user