From 02f18cae0aa9c44beade38b1b14c9f59d54b9078 Mon Sep 17 00:00:00 2001 From: Kurtis Rader Date: Wed, 6 Apr 2016 13:04:44 -0700 Subject: [PATCH] fix setting of $argv for `source` w/no args Fixes #139 --- src/builtin.cpp | 2 +- tests/test1.in | 8 +++++++- tests/test1.out | 4 ++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/builtin.cpp b/src/builtin.cpp index dd67817a3..86213a762 100644 --- a/src/builtin.cpp +++ b/src/builtin.cpp @@ -3375,7 +3375,7 @@ static int builtin_source(parser_t &parser, io_streams_t &streams, wchar_t **arg parser.push_block(new source_block_t(fn_intern)); reader_push_current_filename(fn_intern); - env_set_argv((argc>2)?(argv+2):(argv+1)); + env_set_argv(argc > 1 ? argv + 2 : argv + 1); res = reader_read(fd, streams.io_chain ? *streams.io_chain : io_chain_t()); diff --git a/tests/test1.in b/tests/test1.in index d52d558ee..ff6075cc8 100644 --- a/tests/test1.in +++ b/tests/test1.in @@ -166,5 +166,11 @@ function always_fails end end -always_fails ; echo $status +# Verify $argv set correctly in sourced scripts. +# Issue #139 +echo 'echo "source argv {$argv}"' | source +echo 'echo "source argv {$argv}"' | source - +echo 'echo "source argv {$argv}"' | source - abc +echo 'echo "source argv {$argv}"' | source - abc def +always_fails ; echo $status diff --git a/tests/test1.out b/tests/test1.out index fb5ea8c8a..26251a3bf 100644 --- a/tests/test1.out +++ b/tests/test1.out @@ -52,4 +52,8 @@ pipe 11 pipe 12 Checking for infinite loops in no-execute before comment after comment +source argv {} +source argv {} +source argv {abc} +source argv {abc def} 1