598c7f164c
This was broken since commit 0011c25144 ("BUG/MINOR: cli: avoid O(bufsize) parsing cost on pipelined commands"). It is not really a bug fix but it is labelled as is to make it more visible. Before, a full line was first retrieved from the request buffer before extracting the first command to eval it. Now, only one command is retrieved. But we rely on the request buffer state to interrupt processing in non-interactive mode. After a command processing, if output of the request buffer is empty, we leave. Before the above commit, this was not a problem. But since then, it is obviously a bad statement. First because some input data may still be there. It is not true today, but it might change. Then, there is no warranty to receive all commands in same time. For small list of commands, it will be most of time the case, but it is a dangerous assumption. For long list of commands, it is almost always false. To be an issue, commands must be chunked exactly between two commands. But in this case, remaining commands are skipped. A good way to reproduce the issue is to wait a bit between two commands, for instance: (printf "show info;"; sleep 2; printf "show stat\n") | socat ... In fact, to properly fix the issue, we should exit on the first command finished by a newline. Indeed, as stated in the documentation, in non-interactive mode, a single line is processed. To pipeline commands, commands must be separated by a semi-colon. Unfortunately, the above commit introduced another change. It is possible to pipeline commands delimited by a newline. It was pushed 2 years ago and backported to all stable versions. Several scripts may rely on this behavior. So, on stable version, the bug will not be fixed. However a warning will be emitted to notify users their scripts don't respect the documentation and they must adapt it. Mainly because the cli behavior on this point will be changed in 3.0 to stick to the doc. This warning will only be emitted once over the whole worker process life. Idea is to not flood the logs with the same warning for every offending commands. This commit should probably be backported to all stable versions. But with some cautions because the CLI was often modified.