←back to thread

217 points tanelpoder | 1 comments | | HN request time: 0.296s | source
Show context
enriquto ◴[] No.26493019[source]
The classic copy-pasteable prompt (for true graybeards) is simply

        PS1='; '
If you want some more information, the trick is this:

        PS1=': stuff ; '
where "stuff" is whatever string you want to show (without redirection characters). This works because the colon is the "true" executable that ignores all its arguments, and the semicolon introduces your command that can thus be pasted along the whole line.
replies(3): >>26493124 #>>26493993 #>>26496935 #
erlkonig ◴[] No.26493993[source]
The ";" prompt was specific the "es" and "rc" shells, and not really used with any other more common ones, so most graybeards wouldn't have used that as PS1. Also, to be a graybeard and have copy/paste, you're talking about a very expensive computer with a mouse, like a Sun workstation. And all of those csh users from the late 1980s couldn't have, since it would cause a syntax error :-)
replies(2): >>26494362 #>>26494453 #
afesfsfresfr ◴[] No.26494453[source]
I remember independently inventing the ": foo;" prompt, and using it with Bash, in the late 90s. My beard is gray now.

It's not really practical because there are all sorts of values of "foo" which will make Bash choke when it tries to evaluate the string. Backticks and parentheses, for example, will cause problems, as will newlines (which NB may even occur in filenames, along with other problematic characters!). So the "foo" string typically needs to be sanitized using an external command: https://tldp.org/HOWTO/Bash-Prompt-HOWTO/x279.html

Once you get to that point the idea no longer seems as elegant.

replies(1): >>26497735 #
1. mst ◴[] No.26497735[source]
I just use

  hostname=; 
which seems to work out fine.

I don't think this trick is really intended for people who want fancy prompts, but I'm not one of them, so it's great for me :)