mirror of
https://github.com/nushell/nushell
synced 2024-12-26 04:53:09 +00:00
Escape some symbols in external args (#1687)
* Escape some symbols in external args * Don't escape on Windows, which does its own * fix warning
This commit is contained in:
parent
cf53264438
commit
7d403a6cc7
2 changed files with 31 additions and 1 deletions
|
@ -116,7 +116,23 @@ fn run_with_stdin(
|
||||||
let mut command_args = vec![];
|
let mut command_args = vec![];
|
||||||
for arg in command.args.iter() {
|
for arg in command.args.iter() {
|
||||||
let value = evaluate_baseline_expr(arg, &context.registry, scope)?;
|
let value = evaluate_baseline_expr(arg, &context.registry, scope)?;
|
||||||
command_args.push(value.as_string()?.trim_end_matches('\n').to_string());
|
// Do the cleanup that we need to do on any argument going out:
|
||||||
|
let trimmed_value_string = value.as_string()?.trim_end_matches('\n').to_string();
|
||||||
|
|
||||||
|
let value_string;
|
||||||
|
#[cfg(not(windows))]
|
||||||
|
{
|
||||||
|
value_string = trimmed_value_string
|
||||||
|
.replace('$', "\\$")
|
||||||
|
.replace('"', "\\\"")
|
||||||
|
.to_string()
|
||||||
|
}
|
||||||
|
#[cfg(windows)]
|
||||||
|
{
|
||||||
|
value_string = trimmed_value_string
|
||||||
|
}
|
||||||
|
|
||||||
|
command_args.push(value_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
let process_args = command_args
|
let process_args = command_args
|
||||||
|
|
|
@ -48,6 +48,20 @@ fn automatically_change_directory_with_trailing_slash_and_same_name_as_command()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #[test]
|
||||||
|
// fn correctly_escape_external_arguments() {
|
||||||
|
// let actual = nu!(cwd: ".", r#"^echo '[{"foo": "bar"}]' | from-json | to-json"#);
|
||||||
|
|
||||||
|
// assert_eq!(actual, "{\"foo\":\"bar\"}");
|
||||||
|
// }
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn correctly_escape_external_arguments() {
|
||||||
|
let actual = nu!(cwd: ".", r#"^echo '$0'"#);
|
||||||
|
|
||||||
|
assert_eq!(actual, "$0");
|
||||||
|
}
|
||||||
|
|
||||||
mod it_evaluation {
|
mod it_evaluation {
|
||||||
use super::nu;
|
use super::nu;
|
||||||
use nu_test_support::fs::Stub::{EmptyFile, FileWithContent, FileWithContentToBeTrimmed};
|
use nu_test_support::fs::Stub::{EmptyFile, FileWithContent, FileWithContentToBeTrimmed};
|
||||||
|
|
Loading…
Reference in a new issue