diff --git a/src/reader.cpp b/src/reader.cpp index 08f2f323b..62c3af304 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -4189,7 +4189,12 @@ bool reader_data_t::jump(jump_direction_t dir, jump_precision_t precision, edita return success; } -maybe_t reader_readline(int nchars) { return current_data()->readline(nchars); } +maybe_t reader_readline(int nchars) { + auto *data = current_data(); + // Apply any outstanding commandline changes (#8633). + data->apply_commandline_state_changes(); + return data->readline(nchars); +} int reader_reading_interrupted() { int res = reader_test_and_clear_interrupted(); diff --git a/tests/pexpects/read.py b/tests/pexpects/read.py index 3e0d416ef..929f7a796 100644 --- a/tests/pexpects/read.py +++ b/tests/pexpects/read.py @@ -54,6 +54,18 @@ expect_prompt() expect_marker(2) print_var_contents("foo", "bar") +# read -c (see #8633) +sendline(r"read -c init_text somevar && echo $somevar") +expect_re("\r\n?read> init_text$") +sendline("someval") +expect_prompt("someval\r\n") + +sendline(r"read --command='some other text' somevar && echo $somevar") +expect_re("\r\n?read> some other text$") +sendline("another value") +expect_prompt("another value\r\n") + + # read -s sendline("read -s foo")