Here's a silly ed(1) session: $ ed -p ":> " :> P P *q $
Notice how the prompt string changed from the custom prompt ":> " to the default prompt "*". This behavior seems to contradict both the man page and POSIX: >From ed(1): -p string Specifies a command prompt. This may be toggled on and off with the P command. >From POSIX: The P command shall cause ed to prompt with an <asterisk> ('*') (or string, if -p is specified) for all subsequent commands. The P command alternatively shall turn this mode on and off; it shall be initially on if the -p option is specified; otherwise, off. With the patch below, the above session becomes $ ed -p ":> " :> P P :> q $ which, I believe, is closer to both the documentation and POSIX. This also matches the behavior of GNU Ed 1.10. Index: bin/ed/main.c =================================================================== RCS file: /cvs/src/bin/ed/main.c,v retrieving revision 1.43 diff -u -p -r1.43 main.c --- bin/ed/main.c 16 Jan 2015 06:39:32 -0000 1.43 +++ bin/ed/main.c 18 Jun 2015 10:33:21 -0000 @@ -110,7 +110,7 @@ top: while ((c = getopt(argc, argv, "p:sx")) != -1) switch (c) { case 'p': /* set prompt */ - prompt = optarg; + dps = prompt = optarg; break; case 's': /* run script */ scripted = 1;