From d294689bdd91049843b05df3680b7ff8c0e8d9c8 Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Wed, 15 Feb 2017 10:26:28 -0500 Subject: [PATCH] exec-test: Use `printf -v` in bats_extract_line Also replaces `sed` invocation with a `while` loop, saving a subprocess. --- libexec/bats-exec-test | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/libexec/bats-exec-test b/libexec/bats-exec-test index 71ca9b0..7e86c16 100755 --- a/libexec/bats-exec-test +++ b/libexec/bats-exec-test @@ -157,13 +157,12 @@ bats_print_failed_command() { local status="$2" local filename local lineno + local failed_line + local failed_command bats_frame_filename "$frame" 'filename' bats_frame_lineno "$frame" 'lineno' - - local failed_line="$(bats_extract_line "$filename" "$lineno")" - local failed_command - + bats_extract_line "$filename" "$lineno" 'failed_line' bats_strip_string "$failed_line" 'failed_command' printf '%s' "# \`${failed_command}' " @@ -194,9 +193,15 @@ bats_frame_filename() { } bats_extract_line() { - local filename="$1" - local lineno="$2" - sed -n "${lineno}p" "$filename" + local __bats_extract_line_line + local __bats_extract_line_index='0' + + while IFS= read -r __bats_extract_line_line; do + if [[ "$((++__bats_extract_line_index))" -eq "$2" ]]; then + printf -v "$3" '%s' "${__bats_extract_line_line%$'\r'}" + break + fi + done <"$1" } bats_strip_string() {