forked from extern/nushell
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
@ -116,7 +116,23 @@ fn run_with_stdin(
|
||||
let mut command_args = vec![];
|
||||
for arg in command.args.iter() {
|
||||
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
|
||||
|
@ -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 {
|
||||
use super::nu;
|
||||
use nu_test_support::fs::Stub::{EmptyFile, FileWithContent, FileWithContentToBeTrimmed};
|
||||
|
Loading…
Reference in New Issue
Block a user