diff --git a/changelogs/unreleased/gh-5064-ignore-i-flag-without-tty.md b/changelogs/unreleased/gh-5064-ignore-i-flag-without-tty.md new file mode 100644 index 000000000000..5b9ac622821a --- /dev/null +++ b/changelogs/unreleased/gh-5064-ignore-i-flag-without-tty.md @@ -0,0 +1,3 @@ +## bugfix/console + +* Fixed console ignoring `-i` flag in case stdin is not a tty (gh-5064). diff --git a/src/lua/init.c b/src/lua/init.c index d3a265eb8cd2..ee132ca49384 100644 --- a/src/lua/init.c +++ b/src/lua/init.c @@ -936,7 +936,8 @@ run_script_f(va_list ap) goto luajit_error; if (lua_main(L, argc, argv) != 0) goto error; - } else if (!is_a_tty || (path && strcmp(path, "-") == 0)) { + } else if ((!interactive && !is_a_tty) || + (path && strcmp(path, "-") == 0)) { /* Execute stdin */ if (luaL_loadfile(L, NULL) != 0) goto luajit_error; diff --git a/test/app-luatest/gh_5064_console_ignore_i_flag_without_tty_test.lua b/test/app-luatest/gh_5064_console_ignore_i_flag_without_tty_test.lua new file mode 100644 index 000000000000..12a320b6ac38 --- /dev/null +++ b/test/app-luatest/gh_5064_console_ignore_i_flag_without_tty_test.lua @@ -0,0 +1,20 @@ +local t = require('luatest') +local g = t.group() + +local result_str = [[tarantool> 42 +--- +- 42 +... + +tarantool> ]] + +g.test_console_ignores_i_flag_without_tty = function() + local cmd = [[printf '42\n' | tarantool -i 2>/dev/null]] + local fh = io.popen(cmd, 'r') + + -- Readline on CentOS 7 produces \e[?1034h escape sequence before tarantool> prompt, remove it. + local result = fh:read('*a'):gsub('\x1b%[%?1034h', '') + + fh:close() + t.assert_equals(result, result_str) +end