diff --git a/lib/bashly/views/command/inspect_args.gtx b/lib/bashly/views/command/inspect_args.gtx index 0334d6a6..07a7d6b0 100644 --- a/lib/bashly/views/command/inspect_args.gtx +++ b/lib/bashly/views/command/inspect_args.gtx @@ -1,6 +1,8 @@ = view_marker > inspect_args() { +> local k +> > if ((${#args[@]})); then > readarray -t sorted_keys < <(printf '%s\n' "${!args[@]}" | sort) > echo args: @@ -17,8 +19,8 @@ if catch_all_used_anywhere? > echo > echo other_args: > echo "- \${other_args[*]} = ${other_args[*]}" -> for i in "${!other_args[@]}"; do -> echo "- \${other_args[$i]} = ${other_args[$i]}" +> for k in "${!other_args[@]}"; do +> echo "- \${other_args[$k]} = ${other_args[$k]}" > done > fi > diff --git a/lib/bashly/views/command/parse_requirements.gtx b/lib/bashly/views/command/parse_requirements.gtx index d71fd160..88d5e4fb 100644 --- a/lib/bashly/views/command/parse_requirements.gtx +++ b/lib/bashly/views/command/parse_requirements.gtx @@ -5,6 +5,8 @@ if root_command? else > {{ function_name }}_parse_requirements() { end +> local key +> = render(:fixed_flags_filter).indent 2 = render(:environment_variables_filter).indent 2 diff --git a/spec/approvals/fixtures/local-var-leak b/spec/approvals/fixtures/local-var-leak new file mode 100644 index 00000000..97d77306 --- /dev/null +++ b/spec/approvals/fixtures/local-var-leak @@ -0,0 +1,16 @@ ++ bundle exec bashly generate +creating user files in src +skipped src/one_command.sh (exists) +skipped src/two_command.sh (exists) +skipped src/noop_command.sh (exists) +created ./cli +run ./cli --help to test your bash script ++ ./cli 1 +Before key=THIS IS MY VALUE +noop called +After key=THIS IS MY VALUE ++ ./cli 2 +Before k=THIS IS MY VALUE +args: +- ${args[--user]} = admin +After k=THIS IS MY VALUE diff --git a/spec/fixtures/workspaces/local-var-leak/.gitignore b/spec/fixtures/workspaces/local-var-leak/.gitignore new file mode 100644 index 00000000..573c0c4f --- /dev/null +++ b/spec/fixtures/workspaces/local-var-leak/.gitignore @@ -0,0 +1 @@ +cli diff --git a/spec/fixtures/workspaces/local-var-leak/README.md b/spec/fixtures/workspaces/local-var-leak/README.md new file mode 100644 index 00000000..81b86372 --- /dev/null +++ b/spec/fixtures/workspaces/local-var-leak/README.md @@ -0,0 +1,4 @@ +This fixture tests that variables that are supposed to be local, internal to +bashly, are indeed defined as local and do not leak to the global scope. + +Reference issue: https://github.com/bashly-framework/bashly/issues/681 diff --git a/spec/fixtures/workspaces/local-var-leak/src/bashly.yml b/spec/fixtures/workspaces/local-var-leak/src/bashly.yml new file mode 100644 index 00000000..ec01c8ce --- /dev/null +++ b/spec/fixtures/workspaces/local-var-leak/src/bashly.yml @@ -0,0 +1,19 @@ +name: cli +help: Testing that bashly-defined variables do not leak to the global scope +version: 0.1.0 + +commands: +- name: one + alias: "1" + help: Testing 'key' leakage when calling 'run' internally + +- name: two + alias: "2" + help: Testing 'k' leak when calling 'inspect_args' + flags: + - long: --user + arg: name + default: admin + +- name: noop + help: Does nothing except declare it was called diff --git a/spec/fixtures/workspaces/local-var-leak/src/noop_command.sh b/spec/fixtures/workspaces/local-var-leak/src/noop_command.sh new file mode 100644 index 00000000..0eb5be71 --- /dev/null +++ b/spec/fixtures/workspaces/local-var-leak/src/noop_command.sh @@ -0,0 +1 @@ +echo "noop called" \ No newline at end of file diff --git a/spec/fixtures/workspaces/local-var-leak/src/one_command.sh b/spec/fixtures/workspaces/local-var-leak/src/one_command.sh new file mode 100644 index 00000000..6a130def --- /dev/null +++ b/spec/fixtures/workspaces/local-var-leak/src/one_command.sh @@ -0,0 +1,4 @@ +key="THIS IS MY VALUE" +echo "Before key=$key" +run noop +echo "After key=$key" \ No newline at end of file diff --git a/spec/fixtures/workspaces/local-var-leak/src/two_command.sh b/spec/fixtures/workspaces/local-var-leak/src/two_command.sh new file mode 100644 index 00000000..5e119fc6 --- /dev/null +++ b/spec/fixtures/workspaces/local-var-leak/src/two_command.sh @@ -0,0 +1,4 @@ +k="THIS IS MY VALUE" +echo "Before k=$k" +inspect_args +echo "After k=$k" diff --git a/spec/fixtures/workspaces/local-var-leak/test.sh b/spec/fixtures/workspaces/local-var-leak/test.sh new file mode 100644 index 00000000..cbd1636b --- /dev/null +++ b/spec/fixtures/workspaces/local-var-leak/test.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -x + +bundle exec bashly generate + +./cli 1 +./cli 2