On 2023/05/31 15:01, Hsin-Yi Wang wrote:
 When stdin is not a TTY, prompt ("crash> ") won't be
displayed. If
 another process interact with crash with piped stdin/stdout, it will not
 get the prompt as a delimiter.
 
 Compared to other debugger like gdb, crash seems intended to give a
 prompt in this case in the beginning of process_command_line(). It
 checks if pc->flags does NOT have any of
 READLINE|SILENT|CMDLINE_IFILE|RCHOME_IFILE|RCLOCAL_IFILE, a
 prompt should be printed. The check will never be true since READLINE is
 set in setup_environment() unconditionally.
 
 It makes more sense to change the READLINE flag in the check to TTY
 instead. Besides this change, the prompt in process_command_line() should
 only be print when it's not in the middle of processing the input file
 recovering from a previous FATAL command, because the prompt will be
 displayed by the exec_input_file().
 
 Additionally, when stdin is not TTY, repeat the command line from user
 after prompt, which can give more context.
 
 The prompt and command line can be opt out by using the silent (-s) flag.
 
 Signed-off-by: Hsin-Yi Wang <hsinyi(a)chromium.org>
 ---
 v1: 
https://listman.redhat.com/archives/crash-utility/2023-May/010740.html
 v1->v2:
 1. remove additional prompt when recovering from FATAL command from
 file.
 2. fix a few space/tab indent.
 ---
   cmdline.c | 14 +++++++++-----
   1 file changed, 9 insertions(+), 5 deletions(-)
 
 diff --git a/cmdline.c b/cmdline.c
 index ded6551..b7f919a 100644
 --- a/cmdline.c
 +++ b/cmdline.c
 @@ -64,8 +64,8 @@ process_command_line(void)
   	fp = stdout;
   	BZERO(pc->command_line, BUFSIZE);
   
 -	if (!(pc->flags &
 -	    (READLINE|SILENT|CMDLINE_IFILE|RCHOME_IFILE|RCLOCAL_IFILE)))
 +	if (!pc->ifile_in_progress && !(pc->flags &
 +	    (TTY|SILENT|CMDLINE_IFILE|RCHOME_IFILE|RCLOCAL_IFILE)))
 
Yes, it seems that the pc->ifile_in_progress stores *_IFILE instead of 
pc->flags when re-entering here, so looks good to me.
This kind of UI change can break some use cases, but I hope "crash -s" 
works well for them.
Acked-by: Kazuhito Hagio <k-hagio-ab(a)nec.com>
Please wait for another ack.
Thanks,
Kazu
>   		fprintf(fp, "%s", pc->prompt);
>   	fflush(fp);
>   
> @@ -136,12 +136,16 @@ process_command_line(void)
>   			add_history(pc->command_line);
>   		
>   		check_special_handling(pc->command_line);
> -        } else {
> -        	if (fgets(pc->command_line, BUFSIZE-1, stdin) == NULL)
> +	} else {
> +		if (fgets(pc->command_line, BUFSIZE-1, stdin) == NULL)
>   			clean_exit(1);
> +		if (!(pc->flags & SILENT)) {
> +			fprintf(fp, "%s", pc->command_line);
> +			fflush(fp);
> +		}
>   		clean_line(pc->command_line);
>   		strcpy(pc->orig_line, pc->command_line);
> -        }
> +	}
>   
>   	/*
>   	 *  First clean out all linefeeds and leading/trailing spaces.