From 31a943cb31497a5cfbf8dd01139f232cb155649e Mon Sep 17 00:00:00 2001 From: gferg <> Date: Wed, 22 Aug 2001 14:18:22 +0000 Subject: [PATCH] updated --- .../Bash-Prompt-HOWTO/Bash-Prompt-HOWTO.sgml | 4080 +++++++++++++++++ .../docbook/Bash-Prompt-HOWTO/clockt.jpg | Bin 0 -> 21212 bytes .../docbook/Bash-Prompt-HOWTO/clockt.png | Bin 0 -> 7285 bytes LDP/howto/docbook/Bash-Prompt-HOWTO/dan.jpg | Bin 0 -> 7853 bytes LDP/howto/docbook/Bash-Prompt-HOWTO/dan.png | Bin 0 -> 1351 bytes LDP/howto/docbook/Bash-Prompt-HOWTO/elite.jpg | Bin 0 -> 5358 bytes LDP/howto/docbook/Bash-Prompt-HOWTO/elite.png | Bin 0 -> 1690 bytes LDP/howto/docbook/Bash-Prompt-HOWTO/proml.jpg | Bin 0 -> 15045 bytes LDP/howto/docbook/Bash-Prompt-HOWTO/proml.png | Bin 0 -> 5929 bytes LDP/howto/docbook/Bash-Prompt-HOWTO/twtty.jpg | Bin 0 -> 30666 bytes LDP/howto/docbook/Bash-Prompt-HOWTO/twtty.png | Bin 0 -> 9187 bytes LDP/howto/docbook/HOWTO-INDEX/howtoChap.sgml | 4 +- LDP/howto/docbook/HOWTO-INDEX/hwSect.sgml | 4 +- LDP/howto/docbook/HOWTO-INDEX/miniChap.sgml | 2 +- LDP/howto/docbook/HOWTO-INDEX/osSect.sgml | 2 +- 15 files changed, 4086 insertions(+), 6 deletions(-) create mode 100644 LDP/howto/docbook/Bash-Prompt-HOWTO/Bash-Prompt-HOWTO.sgml create mode 100644 LDP/howto/docbook/Bash-Prompt-HOWTO/clockt.jpg create mode 100644 LDP/howto/docbook/Bash-Prompt-HOWTO/clockt.png create mode 100644 LDP/howto/docbook/Bash-Prompt-HOWTO/dan.jpg create mode 100644 LDP/howto/docbook/Bash-Prompt-HOWTO/dan.png create mode 100644 LDP/howto/docbook/Bash-Prompt-HOWTO/elite.jpg create mode 100644 LDP/howto/docbook/Bash-Prompt-HOWTO/elite.png create mode 100644 LDP/howto/docbook/Bash-Prompt-HOWTO/proml.jpg create mode 100644 LDP/howto/docbook/Bash-Prompt-HOWTO/proml.png create mode 100644 LDP/howto/docbook/Bash-Prompt-HOWTO/twtty.jpg create mode 100644 LDP/howto/docbook/Bash-Prompt-HOWTO/twtty.png diff --git a/LDP/howto/docbook/Bash-Prompt-HOWTO/Bash-Prompt-HOWTO.sgml b/LDP/howto/docbook/Bash-Prompt-HOWTO/Bash-Prompt-HOWTO.sgml new file mode 100644 index 00000000..248ac103 --- /dev/null +++ b/LDP/howto/docbook/Bash-Prompt-HOWTO/Bash-Prompt-HOWTO.sgml @@ -0,0 +1,4080 @@ + + + + + +Bash Prompt HOWTO + $Revision$, $Date$ + + +1998 +1999 +2000 +2001 +Giles Orr + + + + +Permission is granted to copy, distribute and/or modify this document under +the terms of the GNU Free Documentation License, Version 1.1 or any later +version published by the Free Software Foundation; with no Invariant +Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy +of the license is included in the section entitled "GNU Free Documentation +License". + + + + + +Giles +Orr + + +giles at shelluser dot net + + + + + + +Creating and controlling terminal and xterm prompts is discussed, +including incorporating standard escape sequences to give username, +current working directory, time, etc. Further suggestions are made +on how to modify xterm title bars, use external functions to provide +prompt information, and how to use ANSI colours. + + + + + + + + + + + + +Introduction and Administrivia + + +Introduction + + +I've been maintaining this document for three and a half years (I believe +the first submitted version was January 1998). I've received a lot of +e-mail, almost all of it positive with a lot of great suggestions, and I've +had a really good time doing this. Thanks to everyone for the support, +suggestions, and translations! + + + + +I've had several requests both from individuals and the LDP group to issue +a new version of this document, and it's long past due (a year and a half +since the last version) - for which I apologize. Converting this monster +to DocBook format was a daunting task, and then when I realized that I +could now include images, I decided I needed to include all the cool +examples that currently reside on my homepage. Adding these is a slow +process, especially since I'm improving the code as I go, so only a few are +included so far. This document will probably always feel incomplete to me +... I think however that it's reasonably sound from a technical point of +view (although I have some mailed in fixes that aren't in here yet +- if you've heard from me, they'll be in here soon!) so I'm going to post + it and hope I can get to another version soon. + + + + +One other revision of note: this document (as requested by the LDP) is now +under the GFDL. Enjoy. + + + + + + +Revision History + + + + + + v0.89 + 2001-08-20 + go + Added clockt example, several example images added, + improved laptop power code, minor tweaks. + + + + v0.85 + 2001-07-31 + go + Major revisions, plus change from Linuxdoc to DocBook. + + + + + v0.76 + 1999-12-31 + go + + + + + v0.60 + 1998-01-07 + go + Initial public release? + + + + + + + + +Requirements + + +You will need Bash. This should be easy: it's the default shell for just +about every Linux distribution I know of. The commonest version is now +2.0.x. Version 1.14.7 was the standard for a long time, but has mostly +been replaced. I've been using Bash 2.0.x for quite a while now. With +recent revisions of the HOWTO (later than July 2001) I've been using a lot +of code (mainly ${} substitutions) that I believe is specific to 2.x and +may not work with Bash 1.x. You can check your Bash version by typing +echo $BASH_VERSION at the prompt. On my machine, it +responds with 2.04.21(1)-release. + + + + +Shell programming experience would be good, but isn't essential: the more +you know, the more complex the prompts you'll be able to create. I assume +a basic knowledge of shell programming and Unix utilities as I go through +this tutorial. However, my own shell programming skills are limited, so I +give a lot of examples and explanation that may appear unnecessary to an +experienced shell programmer. + + + + + + +How To Use This Document + + +I include a lot of examples and explanatory text. Different parts will be +of varying usefulness to different people. This has grown long enough that +reading it straight through would be difficult - just read the sections you +need, backtrack as necessary. + + + + + +Document Versions, Comments and Suggestions + + +This is a learning experience for me. I've come to know a fair bit about +what can be done to create interesting and useful Bash Prompts, but I need +your input to correct and improve this document. I no longer make code +checks against older versions of Bash, let me know of any incompatibilities +you find. + + + + +The latest version of this document should always be available at + +http://www.shelluser.net/~giles/bashprompt/. The latest official +release should always be at http://www.linuxdoc.org. Please +check these +out, and feel free to e-mail me at giles at shelluser dot net +with suggestions. + + + +I use the Linux Documentation Project HOWTOs almost exclusively in the HTML +format, so when I convert this from DocBook SGML (its native format), HTML +is the only format I check thoroughly. If there are problems with other +formats, I may not know about them and I'd appreciate a note about them. + + + + +There are issues with the PDF and RTF conversions (as of December 2000), +including big problems with example code wrapping around the screen and +getting mangled. I always keep my examples less than 80 characters wide, +but the PDF version seems to wrap around 60. Please use online examples if +the code in these versions don't work for you. But they do look very +pretty. + + + + + + +Translations + + +It has proven quite difficult for me to keep track of the people who are +translating this HOWTO. This list is out of date and incomplete: I include +it for what it's worth, knowing that some of the links will always be +broken. + + + + +If you are working on a translation, please notify me - especially if it's +available at a linkable URL. Thanks. + + + + +Chinese: translation in progress by Allen Huang +lancelot@tomail.com.tw. I will include a URL when I have it. + + + +Dutch: translation is in progress by +Ellen Bokhorst bokkie@nl.linux.org, and it is available +at +http://www.nl.linux.org/doc/HOWTO. + + + +German: translation is in progress by Thomas +Keil, thomas@h-preissler.de. + + + +Italian: by Daniel Dui, +ddui@iee.org, +available at +http://www.crs4.it/~dui/linux.html. + + + +Japanese: http://www.jf.linux.or.jp/JF/JF-ftp/other-formats/Bash-Prompt/Bash-Prompt-HOWTO.html, +provided by Akira Endo, akendo@t3.rim.or.jp. As of +January 2000, This web site seems to be down, and Akira's e-mail +doesn't work. I hope that they will resurface. + + + +Norwegian: translation in progress by Sigmund Kyrre Ĺs +as@stud.ntnu.no. It will be +available at + +http://www.linux.no/nldp/dokumentasjon/howto.html. + + + +Portuguese: translation is in progress by Mário +Gamito, mario.gamito@mail.telepac.pt. + + + +Spanish: translation by Iosu Santurtún +iosu@bigfoot.com at +http://mipagina.euskaltel.es/iosus/linux/Bash-Prompt-HOWTO.html. + + + +Many thanks to all of them! URLs will be included as they're available. + + + + + +Problems + + +This is a list of problems I've noticed while programming prompts. Don't +start reading here, and don't let this list discourage you - +these are mostly quite minor details. Just check back if you run into +anything odd. + + + + + + +Many Bash features (such as math within $(()) among others) are +compile time options. If you're using a binary distribution such as comes +with a standard Linux distribution, all such features should be compiled +in. But if you're working on someone else's system, this is worth keeping +in mind if something you expected to work doesn't. Some notes about this +in Learning the Bash Shell, p.260-262. + + + + + + +The terminal screen manager "screen" doesn't always get along with +ANSI colours. I'm not a screen expert, unfortunately. Versions older than +3.7.6 may cause problems, but newer versions seem to work well in all cases. +Old versions reduce all prompt colours to the standard +foreground colour in X terminals. + + + + + + +Xdefaults files can override colours. Look in +~/.Xdefaults for +lines referring to XTerm*background +and XTerm*foreground (or possibly +XTerm*Background and +XTerm*Foreground). + + + + + + +One of the prompts mentioned in this document uses the output of +"jobs" - as discussed at that time, "jobs" output to a pipe is broken in +Bash 2.02. + + + + + + +ANSI cursor movement escape sequences aren't all implemented in all X +terminals. That's discussed in its own section. + + + + + + +Some nice looking pseudo-graphics can be created by using a VGA font +rather than standard Linux fonts. Unfortunately, these effects look awful +if you don't use a VGA font, and there's no way to detect within a term +what kind of font it's using. + + + + + + +Things that work under Bash 1.14.7 don't necessarily work the +same under 2.0+, or vice versa. + + + + + + +I often use the code PS1="...\\$${NO_COLOUR} " at +the end of my PS1 string. The \\$ is +replaced by a "$" for a normal user, and a "#" if you are root, and the +${NO_COLOUR} is an escape sequence that stops any colour +modifications made by the prompt. However, I've had problems seeing the +"#" when I'm root. I believe this is because Bash doesn't like two dollar +signs in a row. Use PS1="...\\$ ${NO_COLOUR}" +instead. I'm still trying to figure out how to get rid of that extra +space. + + + + + + + + + +Credits/Bibliography + + +In producing this document, I have borrowed heavily from the work of the +Bashprompt project at http://bash.current.nu/ (this site +has been removed from its server as of July 2001 but Robert Current, the +admin, assures me it will reappear soon). Other +sources used include the xterm Title mini-HOWTO by Ric +Lister, available at +http://www.linuxdoc.org/HOWTO/mini/Xterm-Title.html, Ansi +Prompts by Keebler, available at +http://www.ncal.verio.com/~keebler/ansi.html (now deceased), +How to make a Bash Prompt Theme by Stephen Webb, +available at +http://bash.current.nu/bash/HOWTO.html, and X ANSI +Fonts by Stumpy, available at +http://home.earthlink.net/~us5zahns/enl/ansifont.html. + + + + +Also of immense help were several conversations and e-mails from Dan, +who used to work at Georgia College & State University, whose knowledge +of Unix far exceeds mine. He's given me several excellent suggestions, +and ideas of his have led to some interesting prompts. + + + + +Three books that have been very useful while programming prompts are +Linux in a Nutshell by Jessica Heckman Perry +(O'Reilly, 3rd ed., 2000), Learning the Bash Shell by +Cameron Newham and Bill Rosenblatt (O'Reilly, 2nd ed., 1998) and +Unix Shell Programming by Lowell +Jay Arthur (Wiley, 1986. This is the first edition, the fourth came out in +1997). + + + + + + +Disclaimer + + +This document is available for free, and, while I have done the best I can +to make it accurate and up to date, I take no responsibility for any +problems you may encounter resulting from the use of this document. + + + + + + + + + +Bash and Bash Prompts + + +What is Bash? + + +Descended from the Bourne Shell, Bash is a GNU product, the +"Bourne Again SHell." It's the standard command +line interface on most Linux machines. It excels at interactivity, +supporting command line editing, completion, and recall. It also supports +configurable prompts - most people realize this, but don't know how much +can be done. + + + + + +What Can Tweaking Your Bash Prompt Do For You? + + +Most Linux systems have a default prompt in one colour (usually gray) that +tells you your user name, the name of the machine you're working on, and +some indication of your current working directory. This is all useful +information, but you can do much more with the prompt: all sorts of +information can be displayed (tty number, time, date, load, number of +users, uptime ...) and the prompt can use ANSI colours, either to make it +look interesting, or to make certain information stand out. You can also +manipulate the title bar of an Xterm to reflect some of this information. + + + + + +Why Bother? + + +Beyond looking cool, it's often useful to keep track of system information. +One idea that I know appeals to some people is that it makes it possible to +put prompts on different machines in different colours. If you have +several Xterms open on several different machines, or if you tend to forget +what machine you're working on and delete the wrong files (or shut down the +server instead of the workstation), you'll find this a great way to +remember what machine you're on. + + + +For myself, I like the utility of having information about my machine +and work environment available all the time. And I like the challenge of +trying to figure out how to put the maximum amount of information into the +smallest possible space while maintaining readability. + + + + + +The First Step + + +The appearance of the prompt is governed by the shell variable PS1. +Command continuations are indicated by the PS2 string, which can be +modified in exactly the same ways discussed here - since controlling it is +exactly the same, and it isn't as "interesting," I'll mostly be modifying +the PS1 string. (There are also PS3 and PS4 strings. These are never seen +by the average user - see the Bash man page if you're interested in their +purpose.) To change the way the prompt looks, you change the PS1 variable. +For experimentation purposes, you can enter the PS1 strings directly at the +prompt, and see the results immediately (this only affects your current +session, and the changes go away when you log out). If you want to make a +change to the prompt permanent, look at the section below +. + + + +Before we get started, it's important to remember that the PS1 string is +stored in the environment like any other environment variable. If you +modify it at the command line, your prompt will change. Before you make +any changes, you can save your current prompt to another environment +variable: + + + +[giles@nikola giles]$ SAVE=$PS1 +[giles@nikola giles]$ + + + +The simplest prompt would be a single character, such as: + + + +[giles@nikola giles]$ PS1=$ +$ls +bin mail +$ + + + +This demonstrates the best way to experiment with basic prompts, entering +them at the command line. Notice that the text entered by the user +appears immediately after the prompt: I prefer to use + + + +$PS1="$ " +$ ls +bin mail +$ + + + +which forces a space after the prompt, making it more readable. To restore +your original prompt, just call up the variable you stored: + + + +$ PS1=$SAVE +[giles@nikola giles]$ + + + + + +Bash Prompt Escape Sequences + + +There are a lot of escape sequences offered by the Bash shell for +insertion in the prompt. From the Bash 2.04 man page: + + + + When executing interactively, bash displays the primary + prompt PS1 when it is ready to read a command, and the + secondary prompt PS2 when it needs more input to complete + a command. Bash allows these prompt strings to be cus­ + tomized by inserting a number of backslash-escaped special + characters that are decoded as follows: + \a an ASCII bell character (07) + \d the date in "Weekday Month Date" format + (e.g., "Tue May 26") + \e an ASCII escape character (033) + \h the hostname up to the first `.' + \H the hostname + \j the number of jobs currently managed by the + shell + \l the basename of the shell's terminal device + name + \n newline + \r carriage return + \s the name of the shell, the basename of $0 + (the portion following the final slash) + \t the current time in 24-hour HH:MM:SS format + \T the current time in 12-hour HH:MM:SS format + \@ the current time in 12-hour am/pm format + \u the username of the current user + \v the version of bash (e.g., 2.00) + \V the release of bash, version + patchlevel + (e.g., 2.00.0) + \w the current working directory + \W the basename of the current working direc­ + tory + \! the history number of this command + \# the command number of this command + \$ if the effective UID is 0, a #, otherwise a + $ + \nnn the character corresponding to the octal + number nnn + \\ a backslash + \[ begin a sequence of non-printing characters, + which could be used to embed a terminal con­ + trol sequence into the prompt + \] end a sequence of non-printing characters + + + +For long-time users, note the new \j and +\l sequences: these are new in 2.03 or 2.04. + + + +Continuing where we left off: + + + +[giles@nikola giles]$ PS1="\u@\h \W> " +giles@nikola giles> ls +bin mail +giles@nikola giles> + + + +This is similar to the default on most Linux distributions. I wanted a +slightly different appearance, so I changed this to: + + + +giles@nikola giles> PS1="[\t][\u@\h:\w]\$ " +[21:52:01][giles@nikola:~]$ ls +bin mail +[21:52:15][giles@nikola:~]$ + + + + + +Setting the PS? Strings Permanently + + +Various people and distributions set their PS? strings in different places. +The most common places are /etc/profile, /etc/bashrc, ~/.bash_profile, and +~/.bashrc . Johan Kullstam (johan19@idt.net) writes: + + + +
+ +the PS1 string should be set in .bashrc. this is because +non-interactive bashes go out of their way to unset PS1. the bash man +page tells how the presence or absence of PS1 is a good way of knowing +whether one is in an interactive vs non-interactive (ie script) bash +session. + + + +the way i realized this is that startx is a bash script. what this +means is, startx will wipe out your prompt. when you set PS1 in +.profile (or .bash_profile), login at console, fire up X via startx, +your PS1 gets nuked in the process leaving you with the default +prompt. + + + +one workaround is to launch xterms and rxvts with the -ls option to +force them to read .profile. but any time a shell is called via a +non-interactive shell-script middleman PS1 is lost. system(3) uses sh +-c which if sh is bash will kill PS1. a better way is to place the +PS1 definition in .bashrc. this is read every time bash starts and is +where interactive things - eg PS1 should go. + + + +therefore it should be stressed that PS1=..blah.. should be in .bashrc +and not .profile. + + +
+ + +I tried to duplicate the problem he explains, and encountered a +different one: my PROMPT_COMMAND variable (which will be introduced later) +was blown away. My knowledge in this area is somewhat shaky, so I'm going +to go with what Johan says. + + +
+ +
+ + + + +Bash Programming and Shell Scripts + + +Variables + + +I'm not going to try to explain all the details of Bash scripting in +a section of this HOWTO, just the details pertaining to prompts. If +you want to know more about shell programming and Bash in general, I highly +recommend Learning the Bash Shell by Cameron Newham and Bill +Rosenblatt (O'Reilly, 1998). Oddly, my copy of this book is quite frayed. +Again, I'm going to assume that you know a fair +bit about Bash already. You can skip this section if you're only looking +for the basics, but remember it and refer back if you proceed much farther. + + + +Variables in Bash are assigned much as they are in any programming +language: + + + +testvar=5 +foo=zen +bar="bash prompt" + + + +Quotes are only needed in an assignment if a space (or special character, +discussed shortly) is a part of the variable. + + + +Variables are referenced slightly differently than they are assigned: + + + +> echo $testvar +5 +> echo $foo +zen +> echo ${bar} +bash prompt +> echo $NotAssigned + +> + + + +A variable can be referred to as $bar or ${bar}. The +braces are useful when it is unclear what is being referenced: if I write +$barley do I mean ${bar}ley or ${barley}? Note +also that referencing a value that hasn't been assigned doesn't generate an +error, instead returning nothing. + + + + + +Quotes and Special Characters + + +If you wish to include a special character in a variable, you will have to +quote it differently: + + + +> newvar=$testvar +> echo $newvar +5 +> newvar="$testvar" +> echo $newvar +5 +> newvar='$testvar' +> echo $newvar +$testvar +> newvar=\$testvar +> echo $newvar +$testvar +> + + + +The dollar sign isn't the only character that's special to the Bash shell, +but it's a simple example. An interesting step we can take to make use of +assigning a variable name to another variable name is to use eval +to dereference the stored variable name: + + + +> echo $testvar +5 +> echo $newvar +$testvar +> eval echo $newvar +5 +> + + + +Normally, the shell does only one round of substitutions on the expression +it is evaluating: if you say echo $newvar the shell will only go +so far as to determine that $newvar is equal to the text string +$testvar, it won't evaluate what $testvar is equal to. +eval forces that evaluation. + + + + + +Command Substitution + + +In almost all cases in this document, I use the $(<command>) +convention for command substitution: that is, + + + +$(date +%H%M) + + + +means "substitute the output from the date +%H%M command here." +This works in Bash 2.0+. In some older versions of Bash, prior to 1.14.7, +you may need to use backquotes (`date +%H%M`). +Backquotes can be used in Bash 2.0+, but are being phased out in favor of +$(), which nests better. If you're using an earlier version of Bash, you +can usually substitute backquotes where you see $(). If the command +substitution is escaped (ie. \$(command) ), then use backslashes to escape +BOTH your backquotes (ie. \'command\' ). + + + + + +Non-Printing Characters in Prompts + + +Many of the changes that can be made to Bash prompts that are discussed in +this HOWTO use non-printing characters. Changing the colour of the prompt +text, changing an Xterm title bar, and moving the cursor position all +require non-printing characters. + + + +If I want a very simple prompt consisting of a greater-than sign and a +space: + + + +[giles@nikola giles]$ PS1='> ' +> + + + +This is just a two character prompt. If I modify it so that it's a +bright yellow greater-than sign (colours are discussed in their own +section): + + + +> PS1='\033[1;33m>\033[0m ' +> + + + +This works fine - until you type in a large command line. Because the +prompt still only consists of two printing characters (a greater-than sign +and a space) but the shell thinks that this prompt is eleven characters +long (I think it counts '\033' , '[1' and '[0' as one character each). You +can see this by typing a really long command line - you will find that the +shell wraps the text before it gets to the edge of the terminal, and in +most cases wraps it badly. This is because it's confused about the actual +length of the prompt. + + + + +So use this instead: + + + + +> PS1='\[\033[1;33m\]>\[\033[0m\] ' + + + +This is more complex, but it works. Command lines wrap properly. What's +been done is to enclose the '\033[1;33m' that starts the yellow colour in +'\[' and '\]' which tells the shell "everything between these escaped +square brackets, including the brackets themselves, is a non-printing +character." The same is done with the '\033[0m' that ends the colour. + + + + + + +Sourcing a File + + +When a file is sourced (by typing either source filename or . +filename at the command line), the lines of code in the file are +executed as if they were printed at the command line. This is particularly +useful with complex prompts, to allow them to be stored in files and called +up by sourcing the file they are in. + + + +In examples, you will find that I often include #!/bin/bash at the +beginning of files including functions. This is not necessary if +you are sourcing a file, just as it isn't necessary to chmod +x a +file that is going to be sourced. I do this because it makes Vim (my +editor of choice, no flames please - you use what you like) think I'm +editing a shell script and turn on colour syntax highlighting. + + + + + +Functions, Aliases, and the Environment + + +As mentioned earlier, PS1, PS2, PS3, PS4, and PROMPT_COMMAND are all stored +in the Bash environment. For those of us coming from a DOS background, the +idea of tossing big hunks of code into the environment is horrifying, +because that DOS environment was small, and didn't exactly grow well. +There are probably practical limits to what you can and should put in the +environment, but I don't know what they are, and we're probably talking a +couple of orders of magnitude larger than what DOS users are used to. As +Dan put it: + + + +
+ +"In my interactive shell I have 62 aliases and 25 functions. My rule +of thumb is that if I need something solely for interactive use and +can handily write it in bash I make it a shell function (assuming +it can't be easily expressed as an alias). If these people are +worried about memory they don't need to be using bash. Bash is one +of the largest programs I run on my linux box (outside of Oracle). +Run top sometime and press 'M' to sort by memory - see how close +bash is to the top of the list. Heck, it's bigger than sendmail! +Tell 'em to go get ash or something." + +
+ + +I guess he was using console only the day he tried that: running X and X +apps, I have a lot of stuff larger than Bash. But the idea is the same: +the environment is something to be used, and don't worry about overfilling +it. + + + +I risk censure by Unix gurus when I say this (for the crime of +over-simplification), but functions are basically small shell scripts that +are loaded into the environment for the purpose of efficiency. Quoting Dan +again: Shell functions are about as efficient as they can be. It is the +approximate equivalent of sourcing a bash/bourne shell script save that no +file I/O need be done as the function is already in memory. The shell +functions are typically loaded from [.bashrc or .bash_profile] depending on +whether you want them only in the initial shell or in subshells as well. +Contrast this with running a shell script: Your shell forks, the child does +an exec, potentially the path is searched, the kernel opens the file and +examines enough bytes to determine how to run the file, in the case of a +shell script a shell must be started with the name of the script as its +argument, the shell then opens the file, reads it and executes the +statements. Compared to a shell function, everything other than executing +the statements can be considered unnecessary overhead. + + + +Aliases are simple to create: + + + +alias d="ls --color=tty --classify" +alias v="d --format=long" +alias rm="rm -i" + + + +Any arguments you pass to the alias are passed to the command line of the +aliased command (ls in the first two cases). Note that aliases can be +nested, and they can be used to make a normal unix command behave in a +different way. (I agree with the argument that you shouldn't use the +latter kind of aliases - if you get in the habit of relying on "rm *" to +ask you if you're sure, you may lose important files on a system that +doesn't use your alias.) + + + +Functions are used for more complex program structures. As a general rule, +use an alias for anything that can be done in one line. Functions differ +from shell scripts in that they are loaded into the environment so that +they work more quickly. As a general rule again, you would want to +keep functions relatively small, and any shell script that gets relatively +large should remain a shell script rather than turning it into a function. +Your decision to load something as a function is also going to depend on +how often you use it. If you use a small shell script infrequently, leave +it as a shell script. If you use it often, turn it into a function. + + + +To modify the behaviour of ls, you could do something like the +following: + + + +function lf +{ + ls --color=tty --classify $* + echo "$(ls -l $* | wc -l) files" +} + + + +This could readily be set as an alias, but for the sake of example, we'll +make it a function. If you type the text shown into a text file and then +source that file, the function will be in your environment, and be +immediately available at the command line without the overhead of a shell +script mentioned previously. The usefulness of this becomes more obvious +if you consider adding more functionality to the above function, such as +using an if statement to execute some special code when links are found in +the listing. + + +
+
+ + + + +External Commands + + +PROMPT_COMMAND + + +Bash provides an environment variable called PROMPT_COMMAND. +The contents of this variable are executed as a regular Bash command just +before Bash displays a prompt. + + + + +[21:55:01][giles@nikola:~] PS1="[\u@\h:\w]\$ " +[giles@nikola:~] PROMPT_COMMAND="date +%H%M" +2155 +[giles@nikola:~] d +bin mail +2156 +[giles@nikola:~] + + + +What happened above was that I changed PS1 to no longer include the +\t escape sequence (added in a previous section), so +the time was no longer a part of the prompt. Then I used date ++%H%M to display the time in a format I like better. But it +appears on a different line than the prompt. Tidying this up using +echo -n ... as shown below works with Bash 2.0+, but +appears not to work with Bash 1.14.7: apparently the prompt is drawn in a +different way, and the following method results in overlapping text. + + + + +2156 +[giles@nikola:~] PROMPT_COMMAND="echo -n [$(date +%H%M)]" +[2156][giles@nikola:~]$ +[2156][giles@nikola:~]$ d +bin mail +[2157][giles@nikola:~]$ unset PROMPT_COMMAND +[giles@nikola:~] + + + +echo -n ... controls the output of the +date command and +suppresses the trailing newline, allowing the prompt to appear all on one +line. At the end, I used the unset command to +remove the PROMPT_COMMAND environment variable. + + + + + +External Commands in the Prompt + + +You can use the output of regular Linux commands directly in the prompt as +well. Obviously, you don't want to insert a lot of material, or it will +create a large prompt. You also want to use a fast +command, because it's going to be executed every time your prompt appears +on the screen, and delays in the appearance of your prompt while you're +working can be very annoying. (Unlike the previous example that this +closely resembles, this does work with Bash 1.14.7.) + + + +[21:58:33][giles@nikola:~]$ PS1="[\$(date +%H%M)][\u@\h:\w]\$ " +[2159][giles@nikola:~]$ ls +bin mail +[2200][giles@nikola:~]$ + + + +It's important to notice the backslash before the dollar sign of the +command substitution. Without it, the external command is executed exactly +once: when the PS1 string is read into the environment. For this prompt, +that would mean that it would display the same time no matter how long the +prompt was used. The backslash protects the contents of $() from immediate +shell interpretation, so date is called every time +a prompt is generated. + + + + +Linux comes with a lot of small utility programs like +date, grep, or wc +that allow you to manipulate data. If you find yourself trying to create +complex combinations of these programs within a prompt, it may be easier to +make an alias, function, or shell script of your own, and call it from the +prompt. Escape sequences are often required in bash shell scripts to +ensure that shell variables are expanded at the correct time (as seen above +with the date command): this is raised to another level within the prompt +PS1 line, and avoiding it by creating functions is a good idea. + + + + +An example of a small shell script used within a prompt is given below: + + + +#!/bin/bash +# lsbytesum - sum the number of bytes in a directory listing +TotalBytes=0 +for Bytes in $(ls -l | grep "^-" | awk '{ print $5 }') +do + let TotalBytes=$TotalBytes+$Bytes +done +TotalMeg=$(echo -e "scale=3 \n$TotalBytes/1048576 \nquit" | bc) +echo -n "$TotalMeg" + + + +I used to keep this as a function, it now lives as a shell script in my +~/bin directory, which is on my path. +Used in a prompt: + + + + +[2158][giles@nikola:~]$ PS1="[\u@\h:\w (\$(lsbytesum) Mb)]\$ " +[giles@nikola:~ (0 Mb)]$ cd /bin +[giles@nikola:/bin (4.498 Mb)]$ + + + + + +What to Put in Your Prompt + + +You'll find I put username, machine name, time, and current directory name +in most of my prompts. With the exception of the time, these are very +standard items to find in a prompt, and time is probably the next most +common addition. But what you include is entirely a matter of personal +taste. Here is an interesting example to help give you ideas. + + + +Dan's prompt is minimal but very effective, particularly for the way he +works. + + + +[giles@nikola:~]$ cur_tty=$(tty | sed -e "s/.*tty\(.*\)/\1/") +[giles@nikola:~]$ echo $cur_tty +p4 +[giles@nikola:~]$ PS1="\!,$cur_tty,\$?\$ " +1095,p4,0$ + + + +Dan doesn't like that having the current working directory can resize the +prompt drastically as you move through the directory tree, so he keeps +track of that in his head (or types "pwd"). He learned Unix with csh and +tcsh, so he uses his command history extensively (something many of us +weaned on Bash do not do), so the first item in the prompt is the history +number. The second item is the significant characters of the tty (the +output of "tty" is cropped with sed), an item that can be useful to +"screen" users. The third item is the exit value of the last +command/pipeline (note that this is rendered useless by any command +executed within the prompt - you could work around that by capturing it to +a variable and playing it back, though). Finally, the "\$" is a dollar +sign for a regular user, and switches to a hash mark ("#") if the user is +root. + + + + + + + + + +Saving Complex Prompts + + +As the prompts you use become more complex, it becomes more and more +cumbersome to type them in at the prompt, and more practical to make them +into some sort of text file. I have adopted the method used by the +Bashprompt package (discussed later in this document: ), which is to put the primary commands +for the prompt in one file with the PS1 string in particular defined within +a function of the same name as the file itself. It's not the only way to +do it, but it works well. Take the following example: + + + + +#!/bin/bash + +function tonka { + +# Named "Tonka" because of the colour scheme + +local WHITE="\[\033[1;37m\]" +local LIGHT_BLUE="\[\033[1;34m\]" +local YELLOW="\[\033[1;33m\]" +local NO_COLOUR="\[\033[0m\]" + +case $TERM in + xterm*|rxvt*) + TITLEBAR='\[\033]0;\u@\h:\w\007\]' + ;; + *) + TITLEBAR="" + ;; +esac + +PS1="$TITLEBAR\ +$YELLOW-$LIGHT_BLUE-(\ +$YELLOW\u$LIGHT_BLUE@$YELLOW\h\ +$LIGHT_BLUE)-(\ +$YELLOW\$PWD\ +$LIGHT_BLUE)-$YELLOW-\ +\n\ +$YELLOW-$LIGHT_BLUE-(\ +$YELLOW\$(date +%H%M)$LIGHT_BLUE:$YELLOW\$(date \"+%a,%d %b %y\")\ +$LIGHT_BLUE:$WHITE\\$ $LIGHT_BLUE)-$YELLOW-$NO_COLOUR " + +PS2="$LIGHT_BLUE-$YELLOW-$YELLOW-$NO_COLOUR " + +} + + + + + +You can work with it as follows: + + + + +[giles@nikola:/bin (4.498 Mb)]$ cd +[giles@nikola:~ (0 Mb)]$ vim tonka +... +[giles@nikola:~ (0 Mb)]$ source tonka +[giles@nikola:~ (0 Mb)]$ tonka +[giles@nikola:~ (0 Mb)]$ unset tonka + + + + + +Move to the directory where you want to save the prompt + + + + + +Edit the prompt file with your preferred editor + + + + + +Enter the prompt text given above as "tonka" + + + + + +Read the prompt function into the environment + + + + + +Execute the prompt function + + + + + +Optionally, unclutter your environment by unsetting the function + + + + + + + + + + +ANSI Escape Sequences: Colours and Cursor Movement + + +Colours + + +As mentioned before, non-printing escape sequences have to be enclosed in +\[\033[ and \]. For colour +escape sequences, they should also be followed by a lowercase +m. + + + +If you try out the following prompts in an xterm and find that you aren't +seeing the colours named, check out your +~/.Xdefaults file (and +possibly its bretheren) for lines like +XTerm*Foreground: BlanchedAlmond. +This can be commented out by placing an exclamation mark ("!") in front of +it. Of course, this will also be dependent on what terminal emulator +you're using. This is the likeliest place that your term foreground +colours would be overridden. + + + +To include blue text in the prompt: + + + +PS1="\[\033[34m\][\$(date +%H%M)][\u@\h:\w]$ " + + + +The problem with this prompt is that the blue colour that starts with the +34 colour code is never switched back to the regular colour, so any text +you type after the prompt is still in the colour of the prompt. This is +also a dark shade of blue, so combining it with the +bold code might help: + + + +PS1="\[\033[1;34m\][\$(date +%H%M)][\u@\h:\w]$\[\033[0m\] " + + + +The prompt is now in light blue, and it ends by switching the colour +back to nothing (whatever foreground colour you had previously). + + + +Here are the rest of the colour equivalences: + + + +Black 0;30 Dark Gray 1;30 +Blue 0;34 Light Blue 1;34 +Green 0;32 Light Green 1;32 +Cyan 0;36 Light Cyan 1;36 +Red 0;31 Light Red 1;31 +Purple 0;35 Light Purple 1;35 +Brown 0;33 Yellow 1;33 +Light Gray 0;37 White 1;37 + + + +Daniel Dui (ddui@iee.org) points out that to be strictly accurate, we must +mention that the list above is for colours at the console. In an xterm, +the code 1;31 isn't "Light Red," but "Bold Red." +This is true of all the colours. + + + +You can also set background colours by using 44 for Blue background, 41 for +a Red background, etc. There are no bold background colours. Combinations +can be used, like Light Red text on a Blue background: +\[\033[44;1;31m\], although setting the colours +separately seems to work better (ie. +\[\033[44m\]\[\033[1;31m\]). Other codes +available include 4: Underscore, 5: Blink, 7: Inverse, and 8: Concealed. + + + + +Many people (myself included) object strongly to the +"blink" attribute because it's extremely distracting and irritating. +Fortunately, it doesn't work in any terminal emulators +that I'm aware of - but it will still work on the console. + + + + + +If you were wondering (as I did) "What use is a 'Concealed' attribute?!" - +I saw it used in an example shell script (not a prompt) to allow someone to +type in a password without it being echoed to the screen. However, this +attribute doesn't seem to be honoured by many terms other than "Xterm." + + + + + +Based on a prompt called "elite2" in the Bashprompt package (which I +have modified to work better on a standard console, rather than with the +special xterm fonts required to view the original properly), this is a +prompt I've used a lot: + + + +function elite +{ + +local GRAY="\[\033[1;30m\]" +local LIGHT_GRAY="\[\033[0;37m\]" +local CYAN="\[\033[0;36m\]" +local LIGHT_CYAN="\[\033[1;36m\]" +local NO_COLOUR="\[\033[0m\]" + +case $TERM in + xterm*|rxvt*) + local TITLEBAR='\[\033]0;\u@\h:\w\007\]' + ;; + *) + local TITLEBAR="" + ;; +esac + +local temp=$(tty) +local GRAD1=${temp:5} +PS1="$TITLEBAR\ +$GRAY-$CYAN-$LIGHT_CYAN(\ +$CYAN\u$GRAY@$CYAN\h\ +$LIGHT_CYAN)$CYAN-$LIGHT_CYAN(\ +$CYAN\#$GRAY/$CYAN$GRAD1\ +$LIGHT_CYAN)$CYAN-$LIGHT_CYAN(\ +$CYAN\$(date +%H%M)$GRAY/$CYAN\$(date +%d-%b-%y)\ +$LIGHT_CYAN)$CYAN-$GRAY-\ +$LIGHT_GRAY\n\ +$GRAY-$CYAN-$LIGHT_CYAN(\ +$CYAN\$$GRAY:$CYAN\w\ +$LIGHT_CYAN)$CYAN-$GRAY-$LIGHT_GRAY " +PS2="$LIGHT_CYAN-$CYAN-$GRAY-$NO_COLOUR " +} + + + +I define the colours as temporary shell variables in the name of +readability. It's easier to work with. The "GRAD1" variable is a check to +determine what terminal you're on. Like the test to determine if you're +working in an Xterm, it only needs to be done once. The prompt you see +look like this, except in colour: + + + +--(giles@gcsu202014)-(30/pts/6)-(0816/01-Aug-01)-- +--($:~/tmp)-- + + + +To help myself remember what colours are available, I wrote a script that +output all the colours to the screen. Daniel Crisman has supplied a much +nicer version which I include below: + + + +#!/bin/bash +# +# This file echoes a bunch of color codes to the +# terminal to demonstrate what's available. Each +# line is the color code of one forground color, +# out of 17 (default + 16 escapes), followed by a +# test use of that color on all nine background +# colors (default + 8 escapes). +# + +T='gYw' # The test text + +echo -e "\n 40m 41m 42m 43m\ + 44m 45m 46m 47m"; + +for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \ + '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \ + ' 36m' '1;36m' ' 37m' '1;37m'; + do FG=${FGs// /} + echo -en " $FGs \033[$FG $T " + for BG in 40m 41m 42m 43m 44m 45m 46m 47m; + do echo -en "$EINS \033[$FG\033[$BG $T \033[0m"; + done + echo; +done +echo + + + + + + +Cursor Movement + + +ANSI escape sequences allow you to move the cursor around the screen at +will. This is more useful for full screen user interfaces generated by +shell scripts, but can also be used in prompts. The movement escape +sequences are as follows: + + + +- Position the Cursor: + \033[<L>;<C>H + Or + \033[<L>;<C>f + puts the cursor at line L and column C. +- Move the cursor up N lines: + \033[<N>A +- Move the cursor down N lines: + \033[<N>B +- Move the cursor forward N columns: + \033[<N>C +- Move the cursor backward N columns: + \033[<N>D + +- Clear the screen, move to (0,0): + \033[2J +- Erase to end of line: + \033[K + +- Save cursor position: + \033[s +- Restore cursor position: + \033[u + + + +The latter two codes are NOT honoured by many terminal emulators. The only +ones that I'm aware of that do are xterm and nxterm - even though the +majority of terminal emulators are based on xterm code. As far as I can +tell, rxvt, kvt, xiterm, and Eterm do not support them. They are supported +on the console. + + + +Try putting in the following line of code at the prompt (it's a little +clearer what it does if the prompt is several lines down the terminal when +you put this in): +echo -en "\033[7A\033[1;35m BASH \033[7B\033[6D" +This should move the cursor seven lines up screen, print the word +" BASH ", and then return to where it +started to produce a normal prompt. This isn't a prompt: it's just a +demonstration of moving the cursor on screen, using colour to emphasize +what has been done. + + +Save this in a file called "clock": + + + +#!/bin/bash + +function prompt_command { +let prompt_x=$COLUMNS-5 +} + +PROMPT_COMMAND=prompt_command + +function clock { +local BLUE="\[\033[0;34m\]" +local RED="\[\033[0;31m\]" +local LIGHT_RED="\[\033[1;31m\]" +local WHITE="\[\033[1;37m\]" +local NO_COLOUR="\[\033[0m\]" +case $TERM in + xterm*) + TITLEBAR='\[\033]0;\u@\h:\w\007\]' + ;; + *) + TITLEBAR="" + ;; +esac + +PS1="${TITLEBAR}\ +\[\033[s\033[1;\$(echo -n \${prompt_x})H\]\ +$BLUE[$LIGHT_RED\$(date +%H%M)$BLUE]\[\033[u\033[1A\] +$BLUE[$LIGHT_RED\u@\h:\w$BLUE]\ +$WHITE\$$NO_COLOUR " +PS2='> ' +PS4='+ ' +} + + + +This prompt is fairly plain, except that it keeps a 24 hour clock in the +upper right corner of the terminal (even if the terminal is resized). This +will NOT work on the terminal emulators that I mentioned that don't accept +the save and restore cursor position codes. If you try to run this prompt +in any of those terminal emulators, the clock will appear correctly, but +the prompt will be trapped on the second line of the terminal. + + +See also for a +more extensive use of these codes. + + + + + + +Xterm Title Bar Manipulations + + +I'm not sure that these escape sequences strictly qualify as "ANSI Escape +Sequences," but in practice their use is almost identical so I've included +them in this chapter. + + + + +Non-printing escape sequences can be used to produce interesting effects in +prompts. To use these escape sequences, you need to enclose them in +\[ and \] (as discussed in +, telling Bash to ignore this material +while calculating the size of the prompt. Failing to include these +delimiters results in line editing code placing the cursor incorrectly +because it doesn't know the actual size of the prompt. Escape sequences +must also be preceded by \033[ in Bash prior to +version 2, or by either \033[ or +\e[ in later versions. + + + + +If you try to change the title bar of your Xterm with your prompt +when you're at the console, you'll produce garbage in your prompt. +To avoid this, test the TERM environment variable to tell if your prompt +is going to be in an Xterm. + + + + +function proml +{ +case $TERM in + xterm*) + local TITLEBAR='\[\033]0;\u@\h:\w\007\]' + ;; + *) + local TITLEBAR='' + ;; +esac + +PS1="${TITLEBAR}\ +[\$(date +%H%M)]\ +[\u@\h:\w]\ +\$ " +PS2='> ' +PS4='+ ' +} + + + +This is a function that can be incorporated into +~/.bashrc. The +function name could then be called to execute the function. The function, +like the PS1 string, is stored in the environment. Once the PS1 string is +set by the function, you can remove the function from the environment with +unset proml. Since the prompt can't +change from being in an Xterm +to being at the console, the TERM variable isn't tested every time the +prompt is generated. I used continuation markers (backslashes) in the +definition of the prompt, to allow it to be continued on multiple lines. +This improves readability, making it easier to modify and debug. + + + +The first step in creating this prompt is to test if the shell we're +starting is an xterm or not: if it is, the shell variable (${TITLEBAR}) is +defined. It consists of the appropriate escape sequences, and +\u@\h:\w, which puts +<user>@<machine>:<working directory> in the Xterm title +bar. This is particularly useful with minimized Xterms, making them more +rapidly identifiable. The other material in this prompt should be familiar +from previous prompts we've created. + + + + +The only drawback to manipulating the Xterm title bar like this occurs +when you log into a system on which you haven't set up the title bar hack: +the Xterm will continue to show the information from the previous system +that had the title bar hack in place. + + + + +A suggestion from Charles Lepple (clepple at negativezero dot +org) on setting the window title of the Xterm and the title of the +corresponding icon separately. He uses this under WindowMaker because the +title that's appropriate for an Xterm is usually too long for a 64x64 icon. +"\[\e]1;icon-title\007\e]2;main-title\007\]". He says to set this in the +prompt command because I tried putting the string in PS1, but it +causes flickering under some window managers because it results in setting +the prompt multiple times when you are editing a multi-line command (at +least under bash 1.4.x -- and I was too lazy to fully explore the reasons +behind it). I had no trouble with it in the PS1 string, but didn't +use any multi-line commands. He also points out that it works under xterm, +xwsh, and dtterm, but not gnome-terminal (which uses only the main title). +I also found it to work with rxvt, but not kterm. + + + + + + + +Colours and Cursor Movement With <command>tput</command> + + +As with so many things in Unix, there is more than one way to achieve the +same ends. A utility called tput can also be used to +move the cursor around the screen, get back information about the status of the +terminal, or set colours. man tput doesn't go into much +detail about the available commands, but Emilio Lopes e-mailed me to point +out that man terminfo will give you a +huge list of capabilities, many of which are device +independent, and therefore better than the escape sequences previously +mentioned. He suggested that I rewrite all the examples using +tput for this reason. He is correct that I should, but +I've had some trouble controlling it and getting it to do everything I want +it to. However, I did rewrite one prompt which you can see as an example: +. + + + + +Here is a list of tput capabilities that I have found useful: + + + +<command>tput</command> Colour Capabilities + + +tput setab [1-7] +Set a background colour using ANSI escape + + + +tput setb [1-7] +Set a background colour + + + +tput setaf [1-7] +Set a foreground colour using ANSI escape + + + +tput setf [1-7] +Set a foreground colour + + + + + +<command>tput</command> Text Mode Capabilities + + +tput bold +Set bold mode + + + +tput dim +turn on half-bright mode + + + +tput smul +begin underline mode + + + +tput rmul +exit underline mode + + + +tput rev +Turn on reverse mode + + + +tput smso +Enter standout mode (bold on rxvt) + + + +tput rmso +Exit standout mode + + + +tput sgr0 +Turn off all attributes (doesn't work quite as expected) + + + + + +<command>tput</command> Cursor Movement Capabilities + + +tput cup Y X +Move cursor to screen location X,Y (top left is 0,0) + + + +tput sc +Save the cursor position + + + +tput rc +Restore the cursor position + + + +tput lines +Output the number of lines of the terminal + + + +tput cols +Output the number of columns of the terminal + + + +tput cub N +Move N characters left + + + +tput cuf N +Move N characters right + + + +tput cub1 +move left one space + + + +tput cuf1 +non-destructive space (move right one space) + + + +tput ll +last line, first column (if no cup) + + + +tput cuu1 +up one line + + + + + + +<command>tput</command> Clear and Insert Capabilities + + +tput ech N +Erase N characters + + + +tput clear +clear screen and home cursor + + + +tput el1 +Clear to beginning of line + + + +tput el +clear to end of line + + + +tput ed +clear to end of screen + + + +tput ich N +insert N characters (moves rest of line forward!) + + + +tput il N +insert N lines + + + + + +This is by no means a complete list of what terminfo and +tput allow, in fact it's only the beginning. +man tput and man terminfo if you want +to know more. + + + + + + + + + + +Special Characters: Octal Escape Sequences + + +Outside of the characters that you can type on your keyboard, there are a +lot of other characters you can print on your screen. I've created a +script to allow you to check out what the font you're using has available +for you. The main command you need to use to utilize these characters is +"echo -e". The "-e" switch tells echo to enable interpretation of +backslash-escaped characters. What you see when you look at octal 200-400 +will be very different with a VGA font from what you will see with a +standard Linux font. Be warned that some of these escape sequences have +odd effects on your terminal, and I haven't tried to prevent them from +doing whatever they do. The linedraw and block characters that are used +heavily by the Bashprompt project are between octal 260 and 337 in the VGA +fonts. + + + +#!/bin/bash + +# Script: escgen + +function usage { + echo -e "\033[1;34mescgen\033[0m <lower_octal_value> [<higher_octal_value>]" + echo " Octal escape sequence generator: print all octal escape sequences" + echo " between the lower value and the upper value. If a second value" + echo " isn't supplied, print eight characters." + echo " 1998 - Giles Orr, no warranty." + exit 1 +} + +if [ "$#" -eq "0" ] +then + echo -e "\033[1;31mPlease supply one or two values.\033[0m" + usage +fi +let lower_val=${1} +if [ "$#" -eq "1" ] +then + # If they don't supply a closing value, give them eight characters. + upper_val=$(echo -e "obase=8 \n ibase=8 \n $lower_val+10 \n quit" | bc) +else + let upper_val=${2} +fi +if [ "$#" -gt "2" ] +then + echo -e "\033[1;31mPlease supply two values.\033[0m" + echo + usage +fi +if [ "${lower_val}" -gt "${upper_val}" ] +then + echo -e "\033[1;31m${lower_val} is larger than ${upper_val}." + echo + usage +fi +if [ "${upper_val}" -gt "777" ] + then + echo -e "\033[1;31mValues cannot exceed 777.\033[0m" + echo + usage +fi + +let i=$lower_val +let line_count=1 +let limit=$upper_val +while [ "$i" -lt "$limit" ] +do + octal_escape="\\$i" + echo -en "$i:'$octal_escape' " + if [ "$line_count" -gt "7" ] + then + echo + # Put a hard return in. + let line_count=0 + fi + let i=$(echo -e "obase=8 \n ibase=8 \n $i+1 \n quit" | bc) + let line_count=$line_count+1 +done +echo + + + + +You can also use xfd to display all the characters in +an X font, with the command xfd -fn <fontname>. +Clicking on any given +character will give you lots of information about that character, including +its octal value. The script given above will be useful on the console, and +if you aren't sure of the current font name. + + + + + + + + +The Bash Prompt Package + + +Availability + + +The Bash Prompt package was available at http://bash.current.nu/, and is the +work of several people, co-ordinated by Rob Current (aka BadLandZ). The +site was down in July 2001, but Rob Current assures me it will be back up +soon. The package is in beta, but offers a simple way of using multiple +prompts (or themes), allowing you to set prompts for login shells, and for +subshells (ie. putting PS1 strings in ~/.bash_profile +and ~/.bashrc). Most of the themes use the extended +VGA character set, so they look bad unless they're used with VGA fonts +(which aren't the default on most systems). Little work has been done on +this project recently: I hope there's some more progress. + + + + + + +Xterm Fonts + + +To use some of the most attractive prompts in the Bash Prompt package, you +need to get and install fonts that support the character sets expected by +the prompts. These are "VGA Fonts," which support different character sets +than regular Xterm fonts. Standard Xterm fonts support an extended +alphabet, including a lot of letters with accents. In VGA fonts, this +material is replaced by graphical characters - blocks, dots, lines. I +asked for an explanation of this difference, and Sérgio Vale e Pace +(space@gold.com.br) wrote me: + + +
+ +I love computer history so here goes: + + + +When IBM designed the first PC they needed some character codes to use, so +they got the ASCII character table (128 numbers, letters, and some +punctuation) and to fill a byte addressed table they added 128 more +characters. Since the PC was designed to be a home computer, they fill the +remaining 128 characters with dots, lines, points, etc, to be able to do +borders, and grayscale effects (remember that we are talking about 2 color +graphics). + + + +Time passes, PCs become a standard, IBM creates more powerful systems and +the VGA standard is born, along with 256 colour graphics, and IBM continues +to include their IBM-ASCII characters table. + + + +More time passes, IBM has lost their leadership in the PC market, and the +OS authors dicover that there are other languages in the world that use +non-english characters, so they add international alphabet support in their +systems. Since we now have bright and colorful screens, we can trash the +dots, lines, etc. and use their space for accented characters and some +greek letters, which you'll see in Linux. + + +
+ +
+ + +Changing the Xterm Font + + +Getting and installing these fonts is a somewhat involved process. First, +retrieve the font(s). Next, ensure they're .pcf or .pcf.gz files. If +they're .bdf files, investigate the "bdftopcf" command (ie. read the man +page). Drop the .pcf or .pcf.gz files into the +/usr/X11R6/lib/X11/fonts/misc +dir (this is the correct directory for RedHat +5.1 through 7.1, it may be different on other distributions). +cd to that directory, and run mkfontdir. +Then run xset fp rehash and/or restart your X font +server, whichever +applies to your situation. Sometimes it's a good idea to go into the +fonts.alias file in the same directory, and +create shorter alias names for the fonts. + + + +To use the new fonts, you start your Xterm program of choice with the +appropriate command to your Xterm, which can be found either in the man +page or by using the "--help" parameter on the command line. Popular terms +would be used as follows: + + + +xterm -font <fontname> + + + +OR + + + +xterm -fn <fontname> -fb <fontname-bold> +Eterm -F <fontname> +rxvt -fn <fontname> + + + +VGA fonts are available from Stumpy's ANSI Fonts +page at +http://home.earthlink.net/~us5zahns/enl/ansifont.html (which I have +borrowed from extensively while writing this). + + + +
+ + + + +Loading a Different Prompt + + +Loading a Different Prompt, Later + + +The explanations in this HOWTO have shown how to make PS1 environment +variables, or how to incorporate those PS1 and PS2 strings into functions +that could be called by ~/.bashrc or as a theme by the bashprompt +package. + + + +Using the bashprompt package, you would type bashprompt +-i to see a list of available themes. To set the prompt in +future login shells (primarily the console, but also telnet and Xterms, +depending on how your Xterms are set up), you would type +bashprompt -l themename. +bashprompt then modifies your +~/.bash_profile to call the requested theme when +it starts. To set the prompt in future subshells (usually Xterms, rxvt, +etc.), you type bashprompt -s themename, and +bashprompt modifies your ~/.bashrc file to call +the appropriate theme at startup. + + + + +See also for +Johan Kullstam's note regarding the importance of putting the PS? +strings in ~/.bashrc . + + + + + +Loading a Different Prompt, Immediately + + +You can change the prompt in your current terminal (using the example +"elite" function above) by typing source elite +followed by elite (assuming that the elite +function file is the working directory). This is somewhat cumbersome, and +leaves you with an extra function (elite) in your environment space - if +you want to clean up the environment, you would have to type +unset elite as well. This would seem like an +ideal candidate for a small shell script, but a script doesn't work here +because the script cannot change the environment of your current shell: it +can only change the environment of the subshell it runs in. As soon as the +script stops, the subshell goes away, and the changes the script made to +the environment are gone. What can change environment +variables of your current shell are environment functions. The bashprompt +package puts a function called callbashprompt into your +environment, and, while they don't document it, it can be called to load +any bashprompt theme on the fly. It looks in the theme directory it +installed (the theme you're calling has to be there), sources the function +you asked for, loads the function, and then unsets the function, thus +keeping your environment uncluttered. callbashprompt +wasn't intended to be used this way, and has no error checking, but if you +keep that in mind, it works quite well. + + + + + + +Loading Different Prompts in Different X Terms + + +If you have a specific prompt to go with a particular project, or some +reason to load different prompts at different times, you can use multiple +bashrc files instead of always using your ~/.bashrc +file. The Bash command is something like bash --rcfile +/home/giles/.bashprompt/bashrc/bashrcdan, which will start a +new version of Bash in your current terminal. To use this in combination +with a Window Manager menuing system, use a command like rxvt -e +bash --rcfile /home/giles/.bashprompt/bashrc/bashrcdan. The +exact command you use will be dependent on the syntax of your X term of +choice and the location of the bashrc file you're using. + + + + + + + + + + + +Loading Prompt Colours Dynamically + + +A "Proof of Concept" Example + + +This is a "proof of concept" more than an attractive prompt: changing +colours within the prompt dynamically. In this example, the colour of the +host name changes depending on the load (as a warning). + + + +#!/bin/bash +# "hostloadcolour" - 17 October 98, by Giles +# +# The idea here is to change the colour of the host name in the prompt, +# depending on a threshold load value. + +# THRESHOLD_LOAD is the value of the one minute load (multiplied +# by one hundred) at which you want +# the prompt to change from COLOUR_LOW to COLOUR_HIGH +THRESHOLD_LOAD=200 +COLOUR_LOW='1;34' + # light blue +COLOUR_HIGH='1;31' + # light red + +function prompt_command { +ONE=$(uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\)/\1/" -e "s/ //g") +# Apparently, "scale" in bc doesn't apply to multiplication, but does +# apply to division. +ONEHUNDRED=$(echo -e "scale=0 \n $ONE/0.01 \nquit \n" | bc) +if [ $ONEHUNDRED -gt $THRESHOLD_LOAD ] +then + HOST_COLOUR=$COLOUR_HIGH + # Light Red +else + HOST_COLOUR=$COLOUR_LOW + # Light Blue +fi +} + +function hostloadcolour { + +PROMPT_COMMAND=prompt_command +PS1="[$(date +%H%M)][\u@\[\033[\$(echo -n \$HOST_COLOUR)m\]\h\[\033[0m\]:\w]$ " +} + + + +Using your favorite editor, save this to a file named "hostloadcolour". If +you have the Bashprompt package installed, this will work as a theme. If you +don't, type source hostloadcolour and then hostloadcolour. +Either way, "prompt_command" becomes a function in your environment. +If you examine the code, you will notice that the colours ($COLOUR_HIGH and +$COLOUR_LOW) are set using only a partial colour code, ie. "1;34" instead of +"\[\033[1;34m\]", which I would have preferred. I have been unable to get +it to work with the complete code. Please let me know if you manage this. + + + + + + + + + +Prompt Code Snippets + + +This section shows how to put various pieces of information into the Bash +prompt. There are an infinite number of things that could be put in your +prompt. Feel free to send me examples, I'll try to include what I think +will be most widely used. If you have an alternate way to retrieve a piece +of information here, and feel your method is more efficient, please contact +me. It's easy to write bad code, I do it often, but it's great to write +elegant code, and a pleasure to read it. I manage it every once in a +while, and would love to have more of it to put in here. + + + + +To incorporate shell code in prompts, it has to be escaped. Usually, this +will mean putting it inside \$(<command>) so +that the output of command is substituted each time +the prompt is generated. + + + + +Please keep in mind that I develop and test this code on a single user +900 MHz Athlon with 256 meg of RAM, so the delay generated by these code +snippets doesn't usually mean much to me. To help with this, I recently +assembled a 25 MHz 486 SX with 16 meg of RAM, and you will see the output +of the "time" command for each snippet to indicate how much of a delay it +causes on a slower machine. + + + + +Built-in Escape Sequences + + +See for a complete +list of built-in escape sequences. This list is taken directly from the +Bash man page, so you can also look there. + + + + + +Date and Time + + +If you don't like the built-ins for date and time, extracting the same +information from the date command is relatively +easy. Examples already seen in this HOWTO include +date +%H%M, +which will put in the hour in 24 hour format, and the minute. +date "+%A, %d %B %Y" will give something like +"Sunday, 06 June 1999". For a full list +of the interpreted sequences, type date --help or +man date. + + + + +Relative speed: "date ..." takes about 0.12 seconds on an unloaded 486SX25. + + + + + + +Counting Files in the Current Directory + + +To determine how many files there are in the current directory, put in +ls -1 | wc -l. This uses wc +to do a count of the number of lines (-l) in the output of +ls -1. It doesn't count dotfiles. Please note that +ls -l (that's an "L" rather than a "1" as in the +previous examples) which I used in previous versions of this HOWTO will +actually give you a file count one greater than the actual count. Thanks +to Kam Nejad for this point. + + + + +If you want to count only files and NOT include symbolic links (just an +example of what else you could do), you could use ls -l | grep +-v ^l | wc -l (that's an "L" not a "1" this time, we want a +"long" listing here). grep checks for any line +beginning with "l" (indicating a link), and discards that line (-v). + + + + +Relative speed: "ls -1 /usr/bin/ | wc -l" takes about 1.03 seconds on an +unloaded 486SX25 (/usr/bin/ on this machine has 355 files). "ls -l +/usr/bin/ | grep -v ^l | wc -l" takes about 1.19 seconds. + + + + + + +Total Bytes in the Current Directory + + +If you want to know how much space the contents of the current directory +take up, you can use something like the following: + + + +let TotalBytes=0 + +for Bytes in $(ls -l | grep "^-" | awk '{ print $5 }') +do + let TotalBytes=$TotalBytes+$Bytes +done + +# The if...fi's give a more specific output in byte, kilobyte, megabyte, +# and gigabyte + +if [ $TotalBytes -lt 1024 ]; then + TotalSize=$(echo -e "scale=3 \n$TotalBytes \nquit" | bc) + suffix="b" +else if [ $TotalBytes -lt 1048576 ]; then + TotalSize=$(echo -e "scale=3 \n$TotalBytes/1024 \nquit" | bc) + suffix="kb" +else if [ $TotalBytes -lt 1073741824 ]; then + TotalSize=$(echo -e "scale=3 \n$TotalBytes/1048576 \nquit" | bc) + suffix="Mb" +else + TotalSize=$(echo -e "scale=3 \n$TotalBytes/1073741824 \nquit" | bc) + suffix="Gb" +fi +fi +fi + + + +Code courtesy (in part) of Sam Schmit (id at pt dot lu) and +his uncle Jean-Paul, who ironed out a fairly major bug in my original +code, and just generally cleaned it up. + + + +Relative speed: this process takes between 3.2 and 5.8 seconds in /usr/bin/ +(14.7 meg in the directory) on an unloaded 486SX25, depending on how much +of the information is cached (if you use this in a prompt, more or less of +it will be cached depending how long you work in the directory). + + + + + + +Checking the Current TTY + + +The tty command returns the filename of the +terminal connected to standard input. This comes in two formats on the +Linux systems I have used, either "/dev/tty4" or "/dev/pts/2". I've used +several methods over time, but the simplest I've found so far (probably +both Linux- and Bash-2.x specific) is temp=$(tty) ; echo +${temp:5}. This removes the first five characters of the +tty output, in this case "/dev/". + + + + +Previously, I used tty | sed -e "s:/dev/::", which +removes the leading "/dev/". Older systems (in my experience, RedHat +through 5.2) returned only filenames in the "/dev/tty4" format, so I used +tty | sed -e "s/.*tty\(.*\)/\1/". + + + + +An alternative method: +ps ax | grep $$ | awk '{ print $2 }'. + + + +Relative speed: the ${temp:5} method takes about 0.12 seconds on an +unloaded 486SX25, the sed-driven method takes about 0.19 seconds, the +awk-driven method takes about 0.79 seconds. + + + + + + +Stopped Jobs Count + + +Torben Fjerdingstad (tfj at fjerdingstad dot dk) wrote to +tell me that he often stops jobs and then forgets about them. He uses his +prompt to remind himself of stopped jobs. Apparently this is fairly +popular, because as of Bash 2.04, there is a standard escape sequence for +jobs managed by the shell: + + + + +[giles@zinfandel]$ export PS1='\W[\j]\$ ' +giles[0]$ man ls & +[1] 31899 +giles[1]$ xman & +[2] 31907 + +[1]+ Stopped man ls +giles[2]$ jobs +[1]+ Stopped man ls +[2]- Running xman & +giles[2]$ + + + +Note that this shows both stopped and running jobs. At the console, you +probably want the complete count, but in an xterm you're probably only +interested in the ones that are stopped. To display only these, you could +use something like the following: + + + +[giles@zinfandel]$ function stoppedjobs { +-- jobs -s | wc -l | sed -e "s/ //g" +-- } +[giles@zinfandel]$ export PS1='\W[`stoppedjobs`]\$ ' +giles[0]$ jobs +giles[0]$ man ls & +[1] 32212 + +[1]+ Stopped man ls +giles[0]$ man X & +[2] 32225 + +[2]+ Stopped man X +giles[2]$ jobs +[1]- Stopped man ls +[2]+ Stopped man X +giles[2]$ xman & +[3] 32246 +giles[2]$ sleep 300 & +[4] 32255 +giles[2]$ jobs +[1]- Stopped man ls +[2]+ Stopped man X +[3] Running xman & +[4] Running sleep 300 & + + + +This doesn't always show the stopped job in the prompt that follows +immediately after the command is executed - it probably depends on whether +the job is launched and put in the background before jobs +is run. + + + + +There is a known bug in Bash 2.02 that causes the jobs +command (a shell builtin) to return nothing to a pipe. If you try the +above under Bash 2.02, you will always get a "0" back regardless of how +many jobs you have stopped. This problem is fixed in 2.03. + + + + +Relative speed: 'jobs -s | wc -l | sed -e "s/ //g" ' takes about 0.24 +seconds on an unloaded 486SX25. + + + + + + +Load + + +The output of uptime can be used to determine both the +system load and uptime, but its output is exceptionally difficult to parse. +On a Linux system, this is made much easier to deal with by the existence +of the /proc/ file system. +cat /proc/loadavg will show you the one minute, five +minute, and fifteen minute load average, as well as a couple other numbers +I don't know the meaning of (anyone care to fill me in?). + + + + +Getting the one minute load average with a Bash construct is easy: +temp=$(cat /proc/loadavg) && echo ${temp%% *}. +Getting the five minute load average is a little more complex: +temp=$(cat /proc/loadavg) && temp=${temp#* } && echo ${temp%% +*}. There's probably a simpler way than that (anyone?) and +extending this method further to get the 15 minute average would be messy. +I'll figure it out sometime ... + + + + +A simpler, but more processor intensive method to get an individual number +such as the one minute load average, is to use awk: cat +/proc/loadavg | awk '{ print $1 }'. + + + + +For those without the /proc/ +filesystem, you can use +uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\)/\1/" -e "s/ //g" +and replace "\1" with "\2" or "\3" depending if you want the one minute, +five minute, or fifteen minute load average. This is a remarkably +ugly regular expression: send suggestions if you have a better one. + + + + +Relative speed: The shell-driven methods each take about 0.14 seconds on an +unloaded 486SX25. "cat /proc/loadavg | awk '{ print $1 }' " takes about +0.25 seconds. 'uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), +\(.*\...\)/\1/" -e "s/ //g" ' takes about 0.21 seconds. + + + + + + +Uptime + + +As with load, the data available through uptime is very +difficult to parse. Again, if you have the /proc/ filesystem, take advantage of it. I +wrote the following code to output just the time the system has been up: + + + + +#!/bin/bash +# +# upt - show just the system uptime, days, hours, and minutes + +let upSeconds="$(cat /proc/uptime) && echo ${temp%%.*})" +let secs=$((${upSeconds}%60)) +let mins=$((${upSeconds}/60%60)) +let hours=$((${upSeconds}/3600%24)) +let days=$((${upSeconds}/86400)) +if [ "${days}" -ne "0" ] +then + echo -n "${days}d" +fi +echo -n "${hours}h${mins}m" + + + +Output looks like "1h31m" if the system has been up less than a day, or +"14d17h3m" if it has been up more than a day. You can massage the output +to look the way you want it to. This evolved after an e-mail discussion +with David Osolkowski, who gave me some ideas. + + + + +Before I wrote that script, I had a couple emails with David O, who said +me and a couple guys got on irc and started hacking with sed and +got this: +uptime | sed -e 's/.* \(.* days,\)\? \(.*:..,\) .*/\1 \2/' -e's/,//g' -e 's/ days/d/' -e 's/ up //'. +It's ugly, and doesn't use regex nearly as well as it should, but it +works. It's pretty slow on a P75, though, so I removed it. +Considering how much uptime output varies depending on +how long a system has been up, I was impressed they managed as well as they +did. You can use this on systems without +/proc/ filesystem, but as he says, it +may be slow. + + + + +Relative speed: the "upt" script takes about 0.68 seconds on an unloaded +486SX25 (half that as a function). Contrary to David's guess, his use of +sed to parse the output of "uptime" takes only 0.22 seconds. + + + + + + +Number of Processes + + +ps ax | wc -l | tr -d " " OR +ps ax | wc -l | awk '{print $1}' +OR ps ax | wc -l | sed -e "s: ::g". In +each case, tr or awk or +sed is used to remove the undesirable whitespace. + + + +Relative speed: any one of these variants takes about 0.9 seconds on an +unloaded 486SX25. + + + + + + +Controlling the Size and Appearance of $PWD + + +Unix allows long file names, which can lead to the value of $PWD being very +long. Some people (notably the default RedHat prompt) choose to use the +basename of the current working directory (ie. "giles" if +$PWD="/home/giles"). I like more info than that, but it's often desirable +to limit the length of the directory name, and it makes the most sense to +truncate on the left. + + + +# How many characters of the $PWD should be kept +local pwdmaxlen=30 +# Indicator that there has been directory truncation: +#trunc_symbol="<" +local trunc_symbol="..." +if [ ${#PWD} -gt $pwdmaxlen ] +then + local pwdoffset=$(( ${#PWD} - $pwdmaxlen )) + newPWD="${trunc_symbol}${PWD:$pwdoffset:$pwdmaxlen}" +else + newPWD=${PWD} +fi + + + + +The above code can be executed as part of PROMPT_COMMAND, and the +environment variable generated (newPWD) can then +be included in the prompt. Thanks to Alexander Mikhailian +mikhailian at altern dot org who rewrote the code to utilize +new Bash functionality, thus speeding it up considerably. + + + + +Risto Juola (risto AT risto.net) wrote to say that he preferred to have the +"~" in the $newPWD, so he wrote another version: + + + + +pwd_length=20 + +DIR=`pwd` + +echo $DIR | grep "^$HOME" >> /dev/null + +if [ $? -eq 0 ] +then + CURRDIR=`echo $DIR | awk -F$HOME '{print $2}'` + newPWD="~$CURRDIR" + + if [ $(echo -n $newPWD | wc -c | tr -d " ") -gt $pwd_length ] + then + newPWD="~/..$(echo -n $PWD | sed -e "s/.*\(.\{$pwd_length\}\)/\1/")" + fi +elif [ "$DIR" = "$HOME" ] +then + newPWD="~" +elif [ $(echo -n $PWD | wc -c | tr -d " ") -gt $pwd_length ] +then + newPWD="..$(echo -n $PWD | sed -e "s/.*\(.\{$pwd_length\}\)/\1/")" +else + newPWD="$(echo -n $PWD)" +fi + + + +Relative speed: the first version takes about 0.45 seconds on an +unloaded 486SX25. Risto's version takes about 0.80 to 0.95 seconds. The +variation in this case is due to whether or not truncation is required. + + + + + + +Laptop Power + + +If you have a laptop with APM installed, try the following PROMPT_COMMAND +to create an environment variable ${battery} you can +add to your prompt. This will indicate if AC power is connected and +percentage power remaining. AC power is indicated by a "^" (for on) and a +"v" (for off) before the percentage value. + + + + +function prompt_command { + # As much of the response of the "apm" command as is + # necessary to identify the given condition: + NO_AC_MESG="AC off" + AC_MESG="AC on" + + APMD_RESPONSE="$(apm)" + case ${APMD_RESPONSE} in + *${AC_MESG}*) + ACstat="^" + ;; + *${NO_AC_MESG}*) + ACstat="v" + ;; + esac + + battery="${temp##* }" + battery="${ACstat}${battery}" +} + + + + + +Having the Prompt Ignored on Cut and Paste + + +This one is weird but cool. Rory Toma rory at corp dot webtv dot +net wrote to suggest a prompt like this: : rory@demon +; . How is this useful? You can triple click on any previous +command (in Linux, +anyway) to highlight the whole line, then paste that line in front of +another prompt and the stuff between the ":" and the """ is ignored, +like so: + + + + +: rory@demon ; uptime + 5:15pm up 6 days, 23:04, 2 users, load average: 0.00, 0.00, 0.00 +: rory@demon ; : rory@demon ; uptime + 5:15pm up 6 days, 23:04, 2 users, load average: 0.00, 0.00, 0.00 + + + +The prompt is a no-op, and if your PS2 is set to a space, multiple lines +can be cut and pasted as well. + + + + + +New Mail + + +Several people have sent me methods for checking whether or not they had +new e-mail. Most of them relied on programs that aren't on every system. +Then I received the following code from Henrik Veenpere: +cat $MAIL |grep -c ^Message-. This is simple and +elegant, and I like it. + + + + + + + + + + +Example Prompts + + +Examples on the Web + + +Over time, many people have e-mailed me excellent examples, and I've +written some interesting ones myself. There are too many to include here, +so I have put all of the examples together into some web pages which can be +seen at +http://www.shelluser.net/~giles/bashprompt/prompts/. Most of the +examples given here can also be seen on the web. + + + + + + + +A "Lightweight" Prompt + + + +function proml { +local BLUE="\[\033[0;34m\]" +local RED="\[\033[0;31m\]" +local LIGHT_RED="\[\033[1;31m\]" +local WHITE="\[\033[1;37m\]" +local NO_COLOUR="\[\033[0m\]" +case $TERM in + xterm*|rxvt*) + TITLEBAR='\[\033]0;\u@\h:\w\007\]' + ;; + *) + TITLEBAR="" + ;; +esac + +PS1="${TITLEBAR}\ +$BLUE[$RED\$(date +%H%M)$BLUE]\ +$BLUE[$LIGHT_RED\u@\h:\w$BLUE]\ +$WHITE\$$NO_COLOUR " +PS2='> ' +PS4='+ ' +} + + + + + + + + + + + +[1745][giles@zinfandel:~/bin]$ + + + +The lightweight proml prompt, showing time, username, machine +name, and working directory in colour. It also modifies the title of +the terminal. + + + + + + + + +Dan's Prompt + + +Dan was a coworker of mine at the university I work at for a while. Dan +used csh and tcsh for a long time before moving to Bash, so he uses the +history number a lot. He uses "screen" a lot, and for that, it's helpful to +have the tty. The last part of his prompt is the return value of the last +executed command. Dan doesn't like having the $PWD in his prompt because it +makes the prompt grow and shrink too much. + + + + +#!/bin/bash +# Dan's prompt looks like this: +# 543,p3,0$ +# +PROMPT_COMMAND="" +function dan { +local cur_tty=$(temp=$(tty) ; echo ${temp:5}); +PS1="\!,$cur_tty,\$?\$ " +} + + + + + + + + + + + + +1004,pts/7,0$ + + + + + +Dan's prompt: history number, tty number, return value of the last executed +function. + + + + + + + + +Elite from Bashprompt Themes + + +Note that this requires a VGA font. + + + + +# Created by KrON from windowmaker on IRC +# Changed by Spidey 08/06 +function elite { +PS1="\[\033[31m\]\332\304\[\033[34m\](\[\033[31m\]\u\[\033[34m\]@\[\033[31m\]\h\ +\[\033[34m\])\[\033[31m\]-\[\033[34m\](\[\033[31m\]\$(date +%I:%M%P)\ +\[\033[34m\]-:-\[\033[31m\]\$(date +%m)\[\033[34m\033[31m\]/\$(date +%d)\ +\[\033[34m\])\[\033[31m\]\304-\[\033[34m]\\371\[\033[31m\]-\371\371\ +\[\033[34m\]\372\n\[\033[31m\]\300\304\[\033[34m\](\[\033[31m\]\W\[\033[34m\])\ +\[\033[31m\]\304\371\[\033[34m\]\372\[\033[00m\]" +PS2="> " +} + + + + + + + + + + + + + + + + + +The elite prompt from the Bashprompt Themes. + + + + + + + + +A "Power User" Prompt + + +I actually did use this prompt for a while, but it results in noticeable +delays in the appearance of the prompt on a single-user PII-400, so I +wouldn't recommend using it on a multi-user P-100 or anything ... A +rewrite using newer Bash functionality might help, but look at +it for ideas rather than as a practical prompt. + + + + + + + + +#!/bin/bash +#---------------------------------------------------------------------- +# POWER USER PROMPT "pprom2" +#---------------------------------------------------------------------- +# +# Created August 98, Last Modified 9 November 98 by Giles +# +# Problem: when load is going down, it says "1.35down-.08", get rid +# of the negative + +function prompt_command +{ +# Create TotalMeg variable: sum of visible file sizes in current directory +local TotalBytes=0 +for Bytes in $(ls -l | grep "^-" | awk '{print $5}') +do + let TotalBytes=$TotalBytes+$Bytes +done +TotalMeg=$(echo -e "scale=3 \nx=$TotalBytes/1048576\n if (x<1) {print \"0\"} \n print x \nquit" | bc) + +# This is used to calculate the differential in load values +# provided by the "uptime" command. "uptime" gives load +# averages at 1, 5, and 15 minute marks. +# +local one=$(uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\)/\1/" -e "s/ //g") +local five=$(uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\).*/\2/" -e "s/ //g") +local diff1_5=$(echo -e "scale = scale ($one) \nx=$one - $five\n if (x>0) {print \"up\"} else {print \"down\"}\n print x \nquit \n" | bc) +loaddiff="$(echo -n "${one}${diff1_5}")" + +# Count visible files: +let files=$(ls -l | grep "^-" | wc -l | tr -d " ") +let hiddenfiles=$(ls -l -d .* | grep "^-" | wc -l | tr -d " ") +let executables=$(ls -l | grep ^-..x | wc -l | tr -d " ") +let directories=$(ls -l | grep "^d" | wc -l | tr -d " ") +let hiddendirectories=$(ls -l -d .* | grep "^d" | wc -l | tr -d " ")-2 +let linktemp=$(ls -l | grep "^l" | wc -l | tr -d " ") +if [ "$linktemp" -eq "0" ] +then + links="" +else + links=" ${linktemp}l" +fi +unset linktemp +let devicetemp=$(ls -l | grep "^[bc]" | wc -l | tr -d " ") +if [ "$devicetemp" -eq "0" ] +then + devices="" +else + devices=" ${devicetemp}bc" +fi +unset devicetemp + +} + +PROMPT_COMMAND=prompt_command + +function pprom2 { + +local BLUE="\[\033[0;34m\]" +local LIGHT_GRAY="\[\033[0;37m\]" +local LIGHT_GREEN="\[\033[1;32m\]" +local LIGHT_BLUE="\[\033[1;34m\]" +local LIGHT_CYAN="\[\033[1;36m\]" +local YELLOW="\[\033[1;33m\]" +local WHITE="\[\033[1;37m\]" +local RED="\[\033[0;31m\]" +local NO_COLOUR="\[\033[0m\]" + +case $TERM in + xterm*) + TITLEBAR='\[\033]0;\u@\h:\w\007\]' + ;; + *) + TITLEBAR="" + ;; +esac + +PS1="$TITLEBAR\ +$BLUE[$RED\$(date +%H%M)$BLUE]\ +$BLUE[$RED\u@\h$BLUE]\ +$BLUE[\ +$LIGHT_GRAY\${files}.\${hiddenfiles}-\ +$LIGHT_GREEN\${executables}x \ +$LIGHT_GRAY(\${TotalMeg}Mb) \ +$LIGHT_BLUE\${directories}.\ +\${hiddendirectories}d\ +$LIGHT_CYAN\${links}\ +$YELLOW\${devices}\ +$BLUE]\ +$BLUE[${WHITE}\${loaddiff}$BLUE]\ +$BLUE[\ +$WHITE\$(ps ax | wc -l | sed -e \"s: ::g\")proc\ +$BLUE]\ +\n\ +$BLUE[$RED\$PWD$BLUE]\ +$WHITE\$\ +\ +$NO_COLOUR " +PS2='> ' +PS4='+ ' +} + + + + + + +Prompt Depending on Connection Type + + +Bradley M Alexander (storm@tux.org) had the excellent idea of reminding his +users what kind of connection they were using to his machine(s), so he +colour-codes prompts dependent on connection type. Here's the bashrc he +supplied to me: + + + + +# /etc/bashrc + +# System wide functions and aliases +# Environment stuff goes in /etc/profile + +# For some unknown reason bash refuses to inherit +# PS1 in some circumstances that I can't figure out. +# Putting PS1 here ensures that it gets loaded every time. + +# Set up prompts. Color code them for logins. Red for root, white for +# user logins, green for ssh sessions, cyan for telnet, +# magenta with red "(ssh)" for ssh + su, magenta for telnet. +THIS_TTY=tty`ps aux | grep $$ | grep bash | awk '{ print $7 }'` +SESS_SRC=`who | grep $THIS_TTY | awk '{ print $6 }'` + +SSH_FLAG=0 +SSH_IP=`echo $SSH_CLIENT | awk '{ print $1 }'` +if [ $SSH_IP ] ; then + SSH_FLAG=1 +fi +SSH2_IP=`echo $SSH2_CLIENT | awk '{ print $1 }'` +if [ $SSH2_IP ] ; then + SSH_FLAG=1 +fi +if [ $SSH_FLAG -eq 1 ] ; then + CONN=ssh +elif [ -z $SESS_SRC ] ; then + CONN=lcl +elif [ $SESS_SRC = "(:0.0)" -o $SESS_SRC = "" ] ; then + CONN=lcl +else + CONN=tel +fi + +# Okay...Now who we be? +if [ `/usr/bin/whoami` = "root" ] ; then + USR=priv +else + USR=nopriv +fi + +#Set some prompts... +if [ $CONN = lcl -a $USR = nopriv ] ; then + PS1="[\u \W]\\$ " +elif [ $CONN = lcl -a $USR = priv ] ; then + PS1="\[\033[01;31m\][\w]\\$\[\033[00m\] " +elif [ $CONN = tel -a $USR = nopriv ] ; then + PS1="\[\033[01;34m\][\u@\h \W]\\$\[\033[00m\] " +elif [ $CONN = tel -a $USR = priv ] ; then + PS1="\[\033[01;30;45m\][\u@\h \W]\\$\[\033[00m\] " +elif [ $CONN = ssh -a $USR = nopriv ] ; then + PS1="\[\033[01;32m\][\u@\h \W]\\$\[\033[00m\] " +elif [ $CONN = ssh -a $USR = priv ] ; then + PS1="\[\033[01;35m\][\u@\h \W]\\$\[\033[00m\] " +fi + +# PS1="[\u@\h \W]\\$ " +export PS1 +alias which="type -path" +alias dir="ls -lF --color" +alias dirs="ls -lFS --color" +alias h=history + + + + + + +A Prompt the Width of Your Term + + +A friend complained that he didn't like having a prompt that kept changing +size because it had $PWD in it, so I wrote this prompt that adjusts its +size to exactly the width of your term, with the working directory on the +top line of two. + + + + +#!/bin/bash +# termwide prompt with tty number +# by Giles - created 2 November 98, last tweaked 31 July 2001 +# +# This is a variant on "termwide" that incorporates the tty number. +# + +hostnam=$(hostname -s) +usernam=$(whoami) +temp="$(tty)" +# Chop off the first five chars of tty (ie /dev/): +cur_tty="${temp:5}" +unset temp + +function prompt_command { + +# Find the width of the prompt: +TERMWIDTH=${COLUMNS} + +# Add all the accessories below ... +local temp="--(${usernam}@${hostnam}:${cur_tty})---(${PWD})--" + +let fillsize=${TERMWIDTH}-${#temp} +if [ "$fillsize" -gt "0" ] +then + fill="-------------------------------------------------------------------------------------------------------------------------------------------" + # It's theoretically possible someone could need more + # dashes than above, but very unlikely! HOWTO users, + # the above should be ONE LINE, it may not cut and + # paste properly + fill="${fill:0:${fillsize}}" + newPWD="${PWD}" +fi + +if [ "$fillsize" -lt "0" ] +then + fill="" + let cut=3-${fillsize} + newPWD="...${PWD:${cut}}" +fi +} + +PROMPT_COMMAND=prompt_command + +function twtty { + +local WHITE="\[\033[1;37m\]" +local NO_COLOUR="\[\033[0m\]" + +local LIGHT_BLUE="\[\033[1;34m\]" +local YELLOW="\[\033[1;33m\]" + +case $TERM in + xterm*|rxvt*) + TITLEBAR='\[\033]0;\u@\h:\w\007\]' + ;; + *) + TITLEBAR="" + ;; +esac + +PS1="$TITLEBAR\ +$YELLOW-$LIGHT_BLUE-(\ +$YELLOW\$usernam$LIGHT_BLUE@$YELLOW\$hostnam$LIGHT_BLUE:$WHITE\$cur_tty\ +${LIGHT_BLUE})-${YELLOW}-\${fill}${LIGHT_BLUE}-(\ +$YELLOW\${newPWD}\ +$LIGHT_BLUE)-$YELLOW-\ +\n\ +$YELLOW-$LIGHT_BLUE-(\ +$YELLOW\$(date +%H%M)$LIGHT_BLUE:$YELLOW\$(date \"+%a,%d %b %y\")\ +$LIGHT_BLUE:$WHITE\$$LIGHT_BLUE)-\ +$YELLOW-\ +$NO_COLOUR " + +PS2="$LIGHT_BLUE-$YELLOW-$YELLOW-$NO_COLOUR " + +} + + + + + + + + + + + + + + + + + +The twtty prompt in action. + + + + + + + + + +The Floating Clock Prompt + + +I've rewritten this prompt several times. It was originally written using +octal escape sequences, but the ones I needed most for this (save and +restore cursor position) aren't honoured by one of the commonest terminal +emulators, rxvt. I rewrote it using tput, and that's +what you see here. The required tput codes seem to be +universally honoured. The body of the prompt is essentially the same as +the "Lightweight" prompt shown earlier, but a clock is kept floating in the +upper right corner of the term. It will reposition itself correctly even +if the term is resized. + + + + +#!/bin/bash + +# Rewrite of "clock" using tput + +function prompt_command { +# prompt_x is where to position the cursor to write the clock +let prompt_x=$(tput cols)-6 +# Move up one; not sure why we need to do this, but without this, I always +# got an extra blank line between prompts +tput cuu1 +tput sc +tput cup 0 ${prompt_x} +tput setaf 4 ; tput bold +echo -n "[" +tput setaf 1 +echo -n "$(date +%H%M)" +tput setaf 4 ; tput bold +echo -n "]" +tput rc +} + +PROMPT_COMMAND=prompt_command + +function clockt { +local BLUE="\[$(tput setaf 4 ; tput bold)\]" +local LIGHT_RED="\[$(tput setaf 1 ; tput bold)\]" +local WHITE="\[$(tput setaf 7 ; tput bold)\]" +local NO_COLOUR="\[$(tput sgr0)\]" +case $TERM in + xterm*|rxvt*) + TITLEBAR='\[\033]0;\u@\h:\w\007\]' + ;; + *) + TITLEBAR="" + ;; +esac + +PS1="${TITLEBAR}\ +$BLUE[$LIGHT_RED\u@\h:\w$BLUE]\ +$WHITE\$$NO_COLOUR " +PS2='> ' +PS4='+ ' +} + + + + + + + + + + + + + + + + + +The floating clock prompt in action. The clock will stay in correct +position even if the term is resized. + + + + + + + + + +The Elegant Useless Clock Prompt + + +This is one of the more attractive (and useless) prompts I've made. +Because many X terminal emulators don't implement cursor position save and +restore, the alternative when putting a clock in the upper right corner is +to anchor the cursor at the bottom of the terminal. This builds on the +idea of the "termwide" prompt above, drawing a line up the right side of +the screen from the prompt to the clock. A VGA font is required. + + + +Note: There is an odd substitution in here, that may not print properly +being translated from SGML to other formats: I had to substitute the screen +character for \304 - I would normally have just included the sequence +"\304", but it was necessary to make this substitution in this case. + + + + +#!/bin/bash + +# This prompt requires a VGA font. The prompt is anchored at the bottom +# of the terminal, fills the width of the terminal, and draws a line up +# the right side of the terminal to attach itself to a clock in the upper +# right corner of the terminal. + +function prompt_command { +# Calculate the width of the prompt: +hostnam=$(echo -n $HOSTNAME | sed -e "s/[\.].*//") +# "whoami" and "pwd" include a trailing newline +usernam=$(whoami) +newPWD="${PWD}" +# Add all the accessories below ... +let promptsize=$(echo -n "--(${usernam}@${hostnam})---(${PWD})-----" \ + | wc -c | tr -d " ") +# Figure out how much to add between user@host and PWD (or how much to +# remove from PWD) +let fillsize=${COLUMNS}-${promptsize} +fill="" +# Make the filler if prompt isn't as wide as the terminal: +while [ "$fillsize" -gt "0" ] +do + fill="${fill}Ä" + # The A with the umlaut over it (it will appear as a long dash if + # you're using a VGA font) is \304, but I cut and pasted it in + # because Bash will only do one substitution - which in this case is + # putting $fill in the prompt. + let fillsize=${fillsize}-1 +done +# Right-truncate PWD if the prompt is going to be wider than the terminal: +if [ "$fillsize" -lt "0" ] +then + let cutt=3-${fillsize} + newPWD="...$(echo -n $PWD | sed -e "s/\(^.\{$cutt\}\)\(.*\)/\2/")" +fi +# +# Create the clock and the bar that runs up the right side of the term +# +local LIGHT_BLUE="\033[1;34m" +local YELLOW="\033[1;33m" +# Position the cursor to print the clock: +echo -en "\033[2;$((${COLUMNS}-9))H" +echo -en "$LIGHT_BLUE($YELLOW$(date +%H%M)$LIGHT_BLUE)\304$YELLOW\304\304\277" +local i=${LINES} +echo -en "\033[2;${COLUMNS}H" +# Print vertical dashes down the side of the terminal: +while [ $i -ge 4 ] +do + echo -en "\033[$(($i-1));${COLUMNS}H\263" + let i=$i-1 +done + +let prompt_line=${LINES}-1 +# This is needed because doing \${LINES} inside a Bash mathematical +# expression (ie. $(())) doesn't seem to work. +} + +PROMPT_COMMAND=prompt_command + +function clock3 { +local LIGHT_BLUE="\[\033[1;34m\]" +local YELLOW="\[\033[1;33m\]" +local WHITE="\[\033[1;37m\]" +local LIGHT_GRAY="\[\033[0;37m\]" +local NO_COLOUR="\[\033[0m\]" + +case $TERM in + xterm*) + TITLEBAR='\[\033]0;\u@\h:\w\007\]' + ;; + *) + TITLEBAR="" + ;; +esac + +PS1="$TITLEBAR\ +\[\033[\${prompt_line};0H\] +$YELLOW\332$LIGHT_BLUE\304(\ +$YELLOW\${usernam}$LIGHT_BLUE@$YELLOW\${hostnam}\ +${LIGHT_BLUE})\304${YELLOW}\304\${fill}${LIGHT_BLUE}\304(\ +$YELLOW\${newPWD}\ +$LIGHT_BLUE)\304$YELLOW\304\304\304\331\ +\n\ +$YELLOW\300$LIGHT_BLUE\304(\ +$YELLOW\$(date \"+%a,%d %b %y\")\ +$LIGHT_BLUE:$WHITE\$$LIGHT_BLUE)\304\ +$YELLOW\304\ +$LIGHT_GRAY " + +PS2="$LIGHT_BLUE\304$YELLOW\304$YELLOW\304$NO_COLOUR " + +} + + + + + + + +GNU Free Documentation License + + + + + + + Version 1.1, March 2000 + +
+ Copyright (C) 2000 Free Software Foundation, Inc. +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +
+ + + PREAMBLE + + The purpose of this License is to make a manual, textbook, + or other written document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by + others. + + This License is a kind of "copyleft", which means that + derivative works of the document must themselves be free in the + same sense. It complements the GNU General Public License, which + is a copyleft license designed for free software. + + We have designed this License in order to use it for manuals + for free software, because free software needs free documentation: + a free program should come with manuals providing the same + freedoms that the software does. But this License is not limited + to software manuals; it can be used for any textual work, + regardless of subject matter or whether it is published as a + printed book. We recommend this License principally for works + whose purpose is instruction or reference. + + + + APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work that + contains a notice placed by the copyright holder saying it can be + distributed under the terms of this License. The "Document", + below, refers to any such manual or work. Any member of the + public is a licensee, and is addressed as "you". + + A "Modified Version" of the Document means any work + containing the Document or a portion of it, either copied + verbatim, or with modifications and/or translated into another + language. + + A "Secondary Section" is a named appendix or a front-matter + section of the Document that deals exclusively with the + relationship of the publishers or authors of the Document to the + Document's overall subject (or to related matters) and contains + nothing that could fall directly within that overall subject. + (For example, if the Document is in part a textbook of + mathematics, a Secondary Section may not explain any mathematics.) + The relationship could be a matter of historical connection with + the subject or with related matters, or of legal, commercial, + philosophical, ethical or political position regarding + them. + + The "Invariant Sections" are certain Secondary Sections + whose titles are designated, as being those of Invariant Sections, + in the notice that says that the Document is released under this + License. + + The "Cover Texts" are certain short passages of text that + are listed, as Front-Cover Texts or Back-Cover Texts, in the + notice that says that the Document is released under this + License. + + A "Transparent" copy of the Document means a + machine-readable copy, represented in a format whose specification + is available to the general public, whose contents can be viewed + and edited directly and straightforwardly with generic text + editors or (for images composed of pixels) generic paint programs + or (for drawings) some widely available drawing editor, and that + is suitable for input to text formatters or for automatic + translation to a variety of formats suitable for input to text + formatters. A copy made in an otherwise Transparent file format + whose markup has been designed to thwart or discourage subsequent + modification by readers is not Transparent. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include + plain ASCII without markup, Texinfo input format, LaTeX input + format, SGML or XML using a publicly available DTD, and + standard-conforming simple HTML designed for human modification. + Opaque formats include PostScript, PDF, proprietary formats that + can be read and edited only by proprietary word processors, SGML + or XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page + itself, plus such following pages as are needed to hold, legibly, + the material this License requires to appear in the title page. + For works in formats which do not have any title page as such, + "Title Page" means the text near the most prominent appearance of + the work's title, preceding the beginning of the body of the + text. + + + + VERBATIM COPYING + + You may copy and distribute the Document in any medium, + either commercially or noncommercially, provided that this + License, the copyright notices, and the license notice saying this + License applies to the Document are reproduced in all copies, and + that you add no other conditions whatsoever to those of this + License. You may not use technical measures to obstruct or + control the reading or further copying of the copies you make or + distribute. However, you may accept compensation in exchange for + copies. If you distribute a large enough number of copies you + must also follow the conditions in section 3. + + You may also lend copies, under the same conditions stated + above, and you may publicly display copies. + + + + COPYING IN QUANTITY + + If you publish printed copies of the Document numbering more + than 100, and the Document's license notice requires Cover Texts, + you must enclose the copies in covers that carry, clearly and + legibly, all these Cover Texts: Front-Cover Texts on the front + cover, and Back-Cover Texts on the back cover. Both covers must + also clearly and legibly identify you as the publisher of these + copies. The front cover must present the full title with all + words of the title equally prominent and visible. You may add + other material on the covers in addition. Copying with changes + limited to the covers, as long as they preserve the title of the + Document and satisfy these conditions, can be treated as verbatim + copying in other respects. + + If the required texts for either cover are too voluminous to + fit legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a publicly-accessible + computer-network location containing a complete Transparent copy + of the Document, free of added material, which the general + network-using public has access to download anonymously at no + charge using public-standard network protocols. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the + authors of the Document well before redistributing any large + number of copies, to give them a chance to provide you with an + updated version of the Document. + + + + MODIFICATIONS + + You may copy and distribute a Modified Version of the + Document under the conditions of sections 2 and 3 above, provided + that you release the Modified Version under precisely this + License, with the Modified Version filling the role of the + Document, thus licensing distribution and modification of the + Modified Version to whoever possesses a copy of it. In addition, + you must do these things in the Modified Version: + + + Use in the Title Page + (and on the covers, if any) a title distinct from that of the + Document, and from those of previous versions (which should, if + there were any, be listed in the History section of the + Document). You may use the same title as a previous version if + the original publisher of that version gives permission. + + + List on the Title Page, + as authors, one or more persons or entities responsible for + authorship of the modifications in the Modified Version, + together with at least five of the principal authors of the + Document (all of its principal authors, if it has less than + five). + + + State on the Title page + the name of the publisher of the Modified Version, as the + publisher. + + + Preserve all the + copyright notices of the Document. + + + Add an appropriate + copyright notice for your modifications adjacent to the other + copyright notices. + + + Include, immediately + after the copyright notices, a license notice giving the public + permission to use the Modified Version under the terms of this + License, in the form shown in the Addendum below. + + + Preserve in that license + notice the full lists of Invariant Sections and required Cover + Texts given in the Document's license notice. + + + Include an unaltered + copy of this License. + + + Preserve the section + entitled "History", and its title, and add to it an item stating + at least the title, year, new authors, and publisher of the + Modified Version as given on the Title Page. If there is no + section entitled "History" in the Document, create one stating + the title, year, authors, and publisher of the Document as given + on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. + + + Preserve the network + location, if any, given in the Document for public access to a + Transparent copy of the Document, and likewise the network + locations given in the Document for previous versions it was + based on. These may be placed in the "History" section. You + may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. + + + In any section entitled + "Acknowledgements" or "Dedications", preserve the section's + title, and preserve in the section all the substance and tone of + each of the contributor acknowledgements and/or dedications + given therein. + + + Preserve all the + Invariant Sections of the Document, unaltered in their text and + in their titles. Section numbers or the equivalent are not + considered part of the section titles. + + + Delete any section + entitled "Endorsements". Such a section may not be included in + the Modified Version. + + + Do not retitle any + existing section as "Endorsements" or to conflict in title with + any Invariant Section. + + + + If the Modified Version includes new front-matter sections + or appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section entitled "Endorsements", provided it + contains nothing but endorsements of your Modified Version by + various parties--for example, statements of peer review or that + the text has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover + Text, and a passage of up to 25 words as a Back-Cover Text, to the + end of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by + this License give permission to use their names for publicity for + or to assert or imply endorsement of any Modified Version. + + + + COMBINING DOCUMENTS + + You may combine the Document with other documents released + under this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice. + + The combined work need only contain one copy of this + License, and multiple identical Invariant Sections may be replaced + with a single copy. If there are multiple Invariant Sections with + the same name but different contents, make the title of each such + section unique by adding at the end of it, in parentheses, the + name of the original author or publisher of that section if known, + or else a unique number. Make the same adjustment to the section + titles in the list of Invariant Sections in the license notice of + the combined work. + + In the combination, you must combine any sections entitled + "History" in the various original documents, forming one section + entitled "History"; likewise combine any sections entitled + "Acknowledgements", and any sections entitled "Dedications". You + must delete all sections entitled "Endorsements." + + + + COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and + other documents released under this License, and replace the + individual copies of this License in the various documents with a + single copy that is included in the collection, provided that you + follow the rules of this License for verbatim copying of each of + the documents in all other respects. + + You may extract a single document from such a collection, + and distribute it individually under this License, provided you + insert a copy of this License into the extracted document, and + follow this License in all other respects regarding verbatim + copying of that document. + + + + AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, does not as a whole count as a + Modified Version of the Document, provided no compilation + copyright is claimed for the compilation. Such a compilation is + called an "aggregate", and this License does not apply to the + other self-contained works thus compiled with the Document, on + account of their being thus compiled, if they are not themselves + derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to + these copies of the Document, then if the Document is less than + one quarter of the entire aggregate, the Document's Cover Texts + may be placed on covers that surround only the Document within the + aggregate. Otherwise they must appear on covers around the whole + aggregate. + + + + TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires + special permission from their copyright holders, but you may + include translations of some or all Invariant Sections in addition + to the original versions of these Invariant Sections. You may + include a translation of this License provided that you also + include the original English version of this License. In case of + a disagreement between the translation and the original English + version of this License, the original English version will + prevail. + + + + TERMINATION + + You may not copy, modify, sublicense, or distribute the + Document except as expressly provided for under this License. Any + other attempt to copy, modify, sublicense or distribute the + Document is void, and will automatically terminate your rights + under this License. However, parties who have received copies, or + rights, from you under this License will not have their licenses + terminated so long as such parties remain in full + compliance. + + + + FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised + versions of the GNU Free Documentation License from time to time. + Such new versions will be similar in spirit to the present + version, but may differ in detail to address new problems or + concerns. See http://www.gnu.org/copyleft/. + + Each version of the License is given a distinguishing + version number. If the Document specifies that a particular + numbered version of this License "or any later version" applies to + it, you have the option of following the terms and conditions + either of that specified version or of any later version that has + been published (not as a draft) by the Free Software Foundation. + If the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. + + + + How to use this License for your documents + + To use this License in a document you have written, include + a copy of the License in the document and put the following + copyright and license notices just after the title page: + +
+ Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation; + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + A copy of the license is included in the section entitled "GNU + Free Documentation License". +
+ + If you have no Invariant Sections, write "with no Invariant + Sections" instead of saying which ones are invariant. If you have + no Front-Cover Texts, write "no Front-Cover Texts" instead of + "Front-Cover Texts being LIST"; likewise for Back-Cover + Texts. + + If your document contains nontrivial examples of program + code, we recommend releasing these examples in parallel under your + choice of free software license, such as the GNU General Public + License, to permit their use in free software. +
+ +
+ + +
+ diff --git a/LDP/howto/docbook/Bash-Prompt-HOWTO/clockt.jpg b/LDP/howto/docbook/Bash-Prompt-HOWTO/clockt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..167d450ab50ee514de81fdf084501ec37bee6828 GIT binary patch literal 21212 zcmeFYbx@q&mM+{_AOs1)EkJM$?iw5d1b0Y+(=_f90t5*z!QI{I#vufEx5ix?cfI{P zbHAB$PSwmkGj;#^>b_mO-|Fi3-FrQ2J$r3gYd_CDuL52x$jHk85D)+W1o#K=`~=XE zRFjs_P*D@4)X}2UGIMmYva_Y+V&h={LP@D+<|;_Z!TFw3;JpAhCBr9WSxWma&L)+LJt##e`Po@0)j@W4&X!iT7VzKf=+6rPNx%zalou$-FJ7R$Kt+9l zhW;8I{pCw^JS=RC*MxXPM1*(*1SI6N6eOh7WCR41ER@uA^o&f5#1yRTtPJe542%qa zRf2$uii(bgj*E_t%RoXv!tmd|o__;y&;VdWAtZ!%07M)FBpih2E&v5w11Jc8y8!?D zLO?`<%ZrNk68#nY0q|=8A_5W;A~F&R3NkYMX&?Ci0Aw7LH&h%FFK|`ApuTg!nyN74MkHDbdke{Kkalhgd5|ffsa&q(X3kr*hOKNKCz>xZe#-=}= zUEMvsefzmuVzi=S{kp2x8{QKX4{Sz)6 zI4(qFWF%zNzi=TSy1@$)4l)WA$BQ=-s;FNaaNlwIq2Yaq$*%5rNzJ8pg8$WV9G!rM zdyV$=FKB;5_OAi+{~saycVPd43ktwMLVz0&2?rns$f-A?v}-Qx`Rl zGAY-b;^HnVwQ(bKtfLFna+UR12`Z0-_nqVA8X3yPDz<&0m(PIPQ{M+7>1RN<>eaB< zleh6R;02EFsU{vtbVDF5>M_RT)BLevztVoeGXVRHqs2G=o7lDxEam#)ru_-y-7{dl z=-#~b86f)p84!Thep6Chyub2w()Q@jZHANz+t7yVm@?NwzS9%=snX?DHD>-|f^w|Y zp8K+tO*v_`ar9Pd^{8!5j@mENobAhtXTZDIFzqelsM~bo1)k&oM7C|nwblC{-jpUm zLM|jNHq_zOnva|5d~bYidBE6Vm&BJ=)c#ZQptm_T8Qk^J@!|GnoKe4=Miwo|?`Is! z>4C!swoBinn}B)Rm*+y*5a7!B`ZM5$J?t3}n)~<2N)uG@jIdw#n|O~|ohD!Dvp|NP z0anTax{`qyJ{&!(0s{EMK$7iTH-~Rpz+W*HM=YzB1u@hi(r;BYRTG^fdrNUA0dIdP z)a6u;{G~m#NtMIO-iJ};f7F=he5LOwyz$jP@1K|&`dieCBA7n_Ny8Mw7H&2qNEd34 zq7k-*IN8xlGsM+ou-mvr7c)<)Ah#UHPlKcB2`f>2M;k&8D+NCLzqYSZ_ZBMq4660J z;bwC7wV7?->3#;BeEEwzvVX5pZPK-4B5S^y-Aqu>m~2tm#B!y5TeL&v=EbY8b zb;jq!5acl2;esyONJ*qW6dVZ%xh4&tD=R6lipp9{y!lcOyv&~gKjo&TKIq!Z zYS8Rdq85^i+JcRyp8=!2H@?x0glF)EMmqoANdH8?^92#>Jz*J_uoXHh-!+PRxkwt0 zaJ!}2*u~48i}H31_e9kxTNA}Tg!+VWHsn1J4O65F$3s`}sz1?dei1JQ&0pz_D{D^@ z3^bJk?G)#NzW)V1!cOp)F5cpfw+&SFTj#8f1d9T_VO6qy20IlShA5G>o-39hwH_g& z?8T1-TZX!_GGrLoEy{-`k&XOC3XbyUt=@^Z=&GS0U0-7^_5TVJ$oNxx!vs$h-iHZY zMNV0uCAqIVWFbh7@_Gf=U_4Tv zzM3+kWh0>BqM&yJQ_3)tlT^~0$EjdV5|zo5&j6ACaw&7IN3H}?Ir6miByl*iSbBGx zp7{5y(@awD#-*_%h!5ILvO;^r2F~P zcU-ue8Nq&HYjwI;^=%Oo{5P1hr~i%S{zEU$|E>1^642NB{dMq;>{Sr;Z9C;%tLVS3 zPKsrU^#7(l1O8nvzLsCbQqQnUCk{O*9;h>fp8;9$ar1^N;298>`;SbRt@!_B{L74Y zPyY=;|Hc((Uu$gRnW)P3zco1duQmAB8!+jolZV}>u`XY}O$zP8xihgFSz(W7fcQ(e z|F%GV1`x{rv*?uu|C?riW6tG+?D;o|OHZFD>VG1av+qAr_Hq;^ac~ExTKnHCwfSEn zX~68|zj5t(kWb z;DT3}_7}WQ1e##Y5wgfgIrUy@)TtBg;gYdn;Z4|{eGnF|t6b&3dy~qCAAk9)J(Zvb z_gvO2Wz@DpTd^z8qZaISq11B0Zo9lU3Refr{KzkElO4H6sU)4|W_d~t3~n;J?((#u z>9C0W9jf{2@G0+!FXyC(5oKEc+0FO%gI8| ztA6^caMo&BnpIKd7w-7y7G1h;jY;;Sm}}dUUTg~pGa$CrOn?{Wh2Q&FxY68F0PBtU z{kKehlZLEjCi%-E7gxr%QTq06mH5s|z&m0nR3~|z!AWVwcq~aRLNFn8*E4%6+1`Y! zG*S{RHEN>7=-`dC_5E<`FCwaKMK_ra;qW-H)8u!-*^(P-iMqBE@HA|xMan}>znfa> zC70+bmcz(+!amlA8T#W`KX(^e(v3om;eeugGJiin=h;ME~ zEv$r*(k!S&fc?9<2Q^Qc*QnFEOBq#n8Gf`A28!Qmn&h{$V%KG*zj>f5kI5+WZ-8<4 zJ&|YC3{o#6JpfoIi}E<$&P#RS8zM>`B6vQoz5{KmcV%9+(*;w)VmyBgM6-WRP@%=J znQF~p*~?L8cx;#X+FJTTDQxd;D6G#~((gwXM;s#4fqj;_2ep4|-()GH9OS#!Y+UU@ z$WA|ZeM`||QtP|C?=jjcbg$SMG;=h!xWG;5$X!d#L6u$|H!AsiZ<0(qZd`WO?4k4s zyHvJWM3)B}s}d?U`8qWuoQoiRuCL{BU4=dtLD=s%f1zx#yQ2X9%=TP7gdo6);H~yG znlR2~C4Ej*#o(>>B866zt7m%oN)W5*dyK1va50OoBcn}XM`=6M-vtf#GKHP!bEUfP)1^hjNUvo(y{&aQ8l`&i3mCcqop_-$$M*7TNp3OSd%e^aO zdmk;4`Td#MCsOb|VT==^Pn2)WeUA{|<56MS{j~ne3sSG*Bl@YF2DfIfI*g$=ydt6o zFdCo6Q@yJv-tlT%V~y|lf!Pjmf39FgDAG(xjZ<1y z$oAurLw8=%H_2-^+M=hUr9`Sm`K6&w#+(wahzA{b#@m_7nbDI{q;I&;qZj zyv|+i6G2pv?=BDADSC_Ds6GQ;$##lekkmf|+9)2Fw*;ANgebIp|BRoEKE5b_1{?=J z1JK3REN?8H0<@k1*PZaHy$huYUj4s^{+|l|ud+Z>@l>eujZB|Q5xWfb0NhvWyx(|_ z9v1L!d3S=t{>e1qj9`%~h&ejElODO4=X^8tr`0QDwb5ppxVcB*hn|r?>p)9&7%rC# zO+&mXPMPq-JcoOl^#h)`F0ym~xa}oJlAn#7ED2WFRbIIOWSpepC*#7Ia0T~Qe+%R zm~a9-=gY)M6Q~|!-`>@ko?D0-mubxnViCvXgjc? z(f}qHne1hG#kNDVly-)Sj3uZQUHno>=KdLA$o56Jsg7}^)acN#8Mv9AS&>2^Ie)X! zS?inIU8>h|)_Y}18AK-~?yeyb`2xNkGHM}QM}3IYD|~dOxI-(d!_zpG`JwvZsKGA; zwb4QCLHrpIGpO+lsDMw6B=GmX+MjjGXyhGD>U+Mmc1wSV%6EP>SbwsdZihLj--#CY z3eW1COMo^ho+jsh(2sRG``GXd*i)EA$UZZ}w?b3ITvK;T4Ub0+_nNwbevFd@QmY_~Svf`rFC|j? z&5=1ej4yy#dO9X=D}q zV+PkmBE(u-j@w?IaqgB2De*E^P^o&@F>&{kme~xfa`cFs5kGM0 zYwNKvx!}h_(WE}LjC+8n>=A?%-zc2nozCv53V)E*vw6}68 zz{ISK$)G|uA?;&n66hv`Ly0crs9t<1m|{baVIJjV??3;Lli$zz5|{Nm>Pbe%BTxlM zF?lSYg;)!#1!^4SwwC*fHC~y!;O8{yV~W1&uPDzB{rUlwMQ1hI9og#i*7juGVD)q(3CQr*eg=;F4y)Wqa6j7{STXJa8- z)B8$)LbvNJ&RXjgj%KZh@wD>(Gxe71?r|vP84Z$E85*Gee0MhQr>27x{oAE)^L`@U zUAFRKDT2|AKc!+ogw)8pdfOFzoDXR$H|oK}FSwKPtB7Sz^)Q2ISy3ykelNuA|AZx4 zcl+7zfj3bRQC4sBU~CFpzbyt7%w(HHt&-999~H?>n~+|x?9>K5RPO>_g<9@S5g zw|$p_1j?6YujdOfM|3?$+auFY>uGQ$hRRF;E9ZruK?ASyQFA6Ts zkFV_|#f!C~{S_S}O~M^3H-{Wu6yC+a;_&_DZ{c;W-HHTbbmEFK);d<8{4ARtn@O!) z*|JWWBGn&6`bbU*%80>uBR>4a#_76~f|Lx>Q>6#bnYc1=WF}dRPsC2dYJ3H314B(` zgAH9cmy)wW29{SK&acN%F|qSUPvaZnFwTr-}inyHK7ugQ^eeY>w77fIy*|MqRiGzK#G&vgEA-$`{mqmCi;qmF zP1S-nuGNZ8h|wfIRi(tni^miUhaATg!xu3$i?(ZN(yr@*Q;}^hJ}R!R67Y>XH|6eAHT}$H}*AcMsfAHerz2LK%KSR zv|z=JSxxPs+?3&@pe}Sd^3Kr2zZ+OejPT(DNhW+tt+LPef)Vws`-C@)hOxL zg+MNZ>&m%XqH-U2o&l7Kb~l7iKdhbsub%;%!R`l7i@q26Rv9GEfN0wKhgZ*l58Tgy z5Z^P&7MEv$t=OF!__yv^jyy5=EUiK4+7#oex7>DbmLWwtIwB|5GS8JNKa@9Q6DNwD zZB&&taj}~3CztPdZUzeYTE0Box!-F1-P9v zu#Q?~xWcbXcoTWAp#BDEw3ZuY&XNoxs}h^AO^02kr_?XRvu0J18*g4%PH#fw@nHQn zLBh@(m1`Q#GCif%fz-~i8Zz4AtNxuLvIj)~rmSKO10LYntx;yBysLZ4?#+L$tAY33fD(B@~Q)JrYRt z0v+VC!WzpzT)Y-WtLv<`!RiqrCh!1D!tj!@@@#$LI{QIc6-+8a`%PYU#m>2FyuhtH z(WoR$)o6d&Q<;jd+M{ep9i|&@D?n{K-b>%Agcb8gi?Wb}oD7 zmyi|aHb{-Em}s^IYZ>pKiFJPJov#KAi%auu$|`5DP_y{Q*0yvfAZ=acRYaQ!OUJjp zzTZ%XyUEqb!!2;i=F*}pvbUX=3u$Ui`c;sk# zy8fu#j%URy!`l7WvP8)6k5)~=<1|4=dRfXba9%`?tJVT-E!@%LCE=TQ zAy*J+8|Bjfz0G;pu=HIsw0bXK>IBXg)6oOqg0^*C~U<9n<;`N7|s^^ky$a~a9NNA4=G=3i~hhF zT~jEmYUh!z9Ia1`(NTekneTnx@&qbEnU#T$_q7Nt541ctT=WvONU4Dk@DdzW>HpZgs$Sq zJKwz`t$pCe+>vc3sPU++i|#3~{6KWJYWi9QRiu?sX>59-r0wx8F)+x=vRj@eSJc?= zF%0~+-g@AmtyLi+s))HRZ$hfDRbZRMWgkitCi(IUNlgu>T$ zIn~qa8`#ztyXMt!gd=7R*HOZPsV&|)xc=>8BopI@{xyx{+z^HOuapNQr68OgWWUi3 zWwtnZNnpjc=9eVK5uHRU{=q!M3D0s~2EAbr8Q&`h;Evou$jT7&R@z&8!K;Uoay@Vm zRL+)U{h&XFkfSg`e~4e$)ERa=bz-b9Yo2hXBTLzNTVvZ<%@5VAj_(n4#1_CGTT0zh zg3r=@v$teYiqT4H!!^_El#XZP`F4(-^^B$V7HVipj&wkj-(NW0&FY`5bT!cjduzVP zue6-l$B}kJnc|YL|C%wKn{4bDsoDYX4;R?LNCzS^v_o9n&T>O1=msIGY1!F zu7-^!)m5gwKg1+qXw5C)F=g2zsIdGF$lzL;P=(rhVwlR^wL4;SsREcm$=2mA~J#qv%_09K+x<}`4YYcsHM!ZWs&9=l7BKA>vu>BVVnq@ zw6Y^#PJafF|NL@_6_dN4qLsVmL$JMk)pNx>PM7a{RhE?Mn1$2(8eL_%@2hLYL_6=E zewQ9*!q0N6JAwc&VnepL%Dq#|*Lx`=adg?_`9t*y{zC0k!u@Y}T#}GkcD+MxWFmq`&mGb4 zdy3cEQQA8MTt;8sC@&aKylchet~L<%Os{)4#uCMy$vdy+)RI#wSrs%N(Bj=~uq~^| z7e+6LL1Mr=o(IfJr?YTnF%(^#O`Rozx`7PH7m*Hn)hpc#C1x&Ow9M2s(#Jjny7Ve? zue?O0Bps}271gq8W%gCu9O8&*dU)eIUu?r3MDir_tP)9SFB_C!9O7Vj;5oKs& zUz^7bVPy&{%gJq0*~_fEhP2V?OIVyzbi2+(_oCDZf)^d6-vr8yeOzVo`whFleLuhW&kzkBn}rg^5?%AY*q$djq68?*q4N`KsEVWD{og4h8UMu$B!A8L zmiWT=?g73dCW-I%cM})*HrdwTYOo?<`Axka|adg19D zTFGmbw}|?_zuPaURc_$5&ZkwSRV>ys9g_(dTl(lW-^PqvEuA7 zv~fC_nv;}kcBJs5@)zyVm3yM>^r z4GjdHawRZvM97}(*6I5|A4Y}0-%!o#|mhGwftf z{89}MuV?$*4e5u?da<*535i#-7RUq(OXQ)pUlr0Sm+9Mi$hY>FxGQE7 z_E^Go^FG}63kVZXUsOt*ibkz1X>WW#IZ7>D-h)iK|Gc;_uUDXo&Cw++PG^k zU0u5xNNQ`DglGwUB+*uN9mk($Rf%X6@*C`_YY`>RNj2UXHE5W=TcnLg;PqCOqab^a zNVVZe{aWTL+4Xju8xsX3J6My&Re)@f!D9DT{k%znS^-KF{X6Qn$Lyxj_p*1@!%%lO z#f%wZv(pSe5KTzg*dXSqdp|K#Hz;(|nV-fJSGFdie5?|Ne)Mf({|bBvv7T9gWTe=9 zRq>#?(t=bJQP;0jeRp&tOPfySN&WfWjxAJr+wj8|dxYO=fQ^h6ZOK)b%>C2rOmeGC zo5rW%r=iH5!wjH@k=?@K?9hCg?LyC?1(}91miN!XnM0_L9&~#{zST74&xLs4J4k|g zr0LwpqHS&zxA)&#zTES-Wlm1TM^u2-eZBVo`EDj+IX-{y#9eRw@mL8`T-fjA_=UlU{$8nzsV@)k z8!aaE4WDWjEJ0 zXt!m%l9}oH*syfnbnkpsj;a1(vaHOk0di{evq&Ln0R+Nd@4Kb6H?5c65ZDR^Y|tZC z-h}mKt{n#+fh?wfSUGu^gKUqbPGoiyCb)k45e{HYzR}*k&yCYO+%Rp%xr8oGq)%^_ zUFbcb@&Mhg+-<4vMOxY%VM|Q5rmJU#)jJpXTCM79vf(a`Jc=NOoBFQkmG(H3>;;x% z+F0eGH(Y|Zxj6KLf#@6AOaldc!GBVIkq`#gNlozpm(Yc-W6eW*I9NQ>+mlR|Jkr*X zXsZ2c9KZ&*NHnAJGz;wU@(N6>yO4)bq0lqAGJ0^tCz_!GnU2K{PwbBt8Oa56hJz*^ z_(RAqsRf9MQL8E9JtOk0){i!Z69uvk{E0L-_z*#p+U}`{ zOZ-kLJMQ~wMEKQPss{bi`S+WRa+QHo^XGJmAv0!HoXTWn0rrDmYR~!98mZ088-X~Q z3UAbANIi5{R8rfEb$PTy^t($0=(yF{Q4;|GUiG~Ia7TZ zalS7#)7CD$jh`}@yKy}bkJF#DaRCB>^A2A&E@6=|{} zL7*a+?VQ9mOjsy?6o^rCGb#>=mC~{_3%Y4B4Uhi{>2?$(dn59)Z0JvKw>c)~$jq_y zgbQ(*YHm$ai@YvutXU54UEjOtm*fj?sCOJtnFEQ9sHQDuT^<#+o8>09pSJajwJ1NJ z#tgpBigkd0fO#jbxjyh*0F}tPQHa4a0G>T(F6(rq!qZa82fG4p+l=smHe9(PnJN+s zcN2^Vz%wofh6?wv`g(#GNi+9^HtpExW-cyiy2oXA0H9&c1GK_`$}H`vROokTtU474 z4yv#4u%9zn*wb?kW$V(`dh&=#lBU}VV) z5O261KPB{GPP0?GMe28WV#Elc5FS!yPWhgl3HgOe$-?5|JjQK|zH*h^BH5RDGAw)e z+8Nm)EwX(*<;Hb#U9=ihutx}i%rt?A+*DaNy=bJ9BB~J3UWdN`P;e0&HEbdU<}{W2 zcDgnZB(Uu?G&U06D#rSx}W3nQ|F^~9gWQBze7 z3qxE;VX|v>f$eqg*=*Z}i}wk}JkDxwRappxObjyPWt8#kxuhYvK29gTnl+6rjVS}8 zx|2`Cb~I(<9c`rR_jqY+8~wfNGvE1}7%ECTq2@p711m4f&0H8oJH0TAA$9S%Fi}s1 z{_~pp_}aecIEd1Hy!c0gEG(_i3l;1e70GEr-6>E(?Da>m7ym|mqGtUhxzRc!jhWRE zp-ED>5;1zf(EWxb5r>hxqDoXZFT1Yn)xt}gh^3`EJy`NR;mB!V><#00(~t#P*}LhF zwv^Fu>s}nJAnf`3(Ct&xwnqH1=2QX^lmm+z3A6_77i=j%g_vSiA^s@fd)?tb-HvXx zOnyq>N0405S*o*O{g!e3@F=IDA<|95xy5jgA>xIcIq64VwlT+rs;sw4(r$N!LC*5R z@7W6T>GDC0lP{`C3>NeDt9|NpiInFiS=%{p(*S5nKO%O3UB=jTN_0v^ITnJ9%Lhn&HKD z6iL4#KV5!J&1$wI>+HYY(6JtHjADxV!@si41>IsFV zqO21MbK4FrcL*&O=8h=#N@+bpjWnH4ZHguFW2=`5?T{+p(P4pwt0eCCA#KOcPrDm* zN{y6cDEM|7Uc~S7eVCTFp?w>Jq1!GQ(yJD1Mc>cku4NFA(oCn|z2>i;^B)CM1^pS& zH=6qlnB5e+BPwlwEw<@6Eq0Lg3>cGEJE?pKzY}}>Cix7=4sAX~dXi;Te`>;hM26=L zoNe7b1^J$xZ~9RDr;DJEC$kTJtnI7DcQ}O)@JeFIH!ANPo&gi_6^>D96%SSwqlM*Z z6S_H%@vO*uh5EgYpLM#v2w#RP$R;3Cq;4A&_t9w4ZfCoA*_ogWHLq9ySXihS zKwEV>@7tlLPjd!n)cksH89@Ts{3K6bxF(ls;(v%gw-;YQlHUv~; zoY3Mz_f)mXib@N}J&u0wIbD6qpO@u>o6&zzB}w8JI~0nb#NU6@kX=aWEDjQBFGZ#C zj&V#zJ_Gb@#(OIG%#awq)NZ4$q~RE-4>HMQ)@>Ul*6JTS$1ao}Y74eTMBOM}X2MkJ zZ?6^}GHZP@5A7cl2jHXnz33?OU$ITwA-mhBYo5$<>sgZF2?N7kGqO;Bc9z3z@JB=y z#y3oH{hQ$z#H$*-r(G~Alr$Qfxi68jW0NK-!da1kmo^skR#)7ztfdUy1(mF^&2}1X z1HelA9T|9{c{tC)aV@c3OXKHcTdAwDUgR3(#s%&gnUaYC&MvvFBm$GPTGMG^{gQnx z&Ut0-xpK1(_j2w*pxIY6rrv=F$IfWdBCLHhtkoS^WXCRjH1+|mw?{jul{4AD=#x2F zkhVt9<6;7)F3W+Ymkg5;x+A;^GtF&}afh_3d_eNVNKq>5l$8*k+w$~xb?uD}mRl)3 zD6RS)#E_m@gpXMsrZO4=q@pU#-S+W?oV~nxUoCs76Z%J0268w$DB{`&I~mNEnuYI7 zLia192XKq~)r4by<+?(rxxtgepn|)fn&XyM?!Mhk6@Dfz76lP}eNF3MoC@>}>H?S+ z6ctI|G{=zII>e(AZ%5!7&Ulmi_+aMo&de72fd3fnjg8WHa|*jB6BS4b)`Xjqk*!y_ zTfPs5k#>Jn$;8-ZCA_KiAdVQSXkYqCu8({Mdkx*EL5izycfjPZYiFTotKpe+F9kkpuB11s*? zz0W_Vj{`(!YlLV~TlqdUO|rf9BK9seA_mPvf`%M>#v3-@ z79Da;Sx}><6szkgL>o%7RLMG#*_MqB=+Jy8i~pL(i!JGoosEa!`-!COC+3k~vHs$m zT?%Pfm{5{%BXUU8RxFV%1Je^!uvlCB|q!A35*y9Fp5Q@|@r)8XAK z4Na2yn)~%LW>{p=Zi>=u4+Vx*SfQ+4zO_nj-Hd}Gl{gz!y@#f5QUh||&FxR(1Km?! z6JQEzNJK^esDL-lG|}}M$3ThZ>=}^P@nSx#F`}lHfR;LH`;)llKs0*!`U=i|)uLVx zYe9yNDc7Pzfqqy&HQL9r>sJ&h^WxhwtO;uOKT&E2W~=wE?m$tI!e6rX+DIa_r6w3t~yg*aiKS2>50hLF*#w*$h~2DZ?~k@1MiS2y2!4JTj) z8PM&Q*~wW_^)Zsxu)6j*tn;%G&Ju+n!-~xJ$<=HE%|M}6H(lO4wq%-mJ}ek!M7X1Z z_!cB5cI3l%&scj-`2%rs-@ukn%gSK4iq!N(E`8fpB__-dXrVME(T^!=RTb(&M4x-A zIVqvT;n*bBdbY(S(!B9l({dk_#OB}C-hWI@I=&Z{>LtL-`67=xxctrH9i)ZP!@}fb zqswV!FJ|AG2gEIlJkjD{$G+nDq^te;#UYB>EhJVBMc=n0K&kpB@nl7{e%vPBr4W(? zO{VA2Q{Z_?^+xi3_!bc`7nAPB-E~KIw&L4#u>tJd{A`*J^eODD z2;g0UiUihgKmAr)Ia5wia!&CfhVD9G3b#6D52)e8QF-y=$uq?Rck-;y^pPhRXE7J_{k zYw>FMlHQkXHoAO1T$Jg<;RvV~8mu1{CtGe3R?JoMHCt!)QJC;i2Mu@W{lcJ03;s&? zxHSdOapCwM!ZC{`rH`?ySw} zm#yg2#w<|<`rNSvNrXh3;tJ3*?s)!6cu2;ySf(sjsogyN3Ou0(KK4o3yV-TP5~ZIm zOBwBNh{&yj0QuKamIZPwKbCXIMog6j3^{JN^MB4Wv0i6&GH#!F@bjMO$0H55*VB^* zzDelWK3mr`?6vlv>qpN@W9XGwePmiOI+aPc^UcZ6NH3D)c4(n9Q|l}H7*pG9<_CCN zy3eI67@3{DsM||h5Ot-vdo<|5%o2r>a6_bR?$dq75f5co@ix&6RW7Vmb(@4FHXSc< znMEj9)_elZ^TB`48lA%TtANI**r94bolA>`s-{q>7Hxgax(r>7^xD4tlCwUnhrdQ~ zM=af1^6Loj;4tU8GUvR$&hoonCzQx^kY!w;i_7x62seCFWZb?%fVerTzSg*N$9g5I z1WK$Vuy{dt*a=;3OHrN*(|X^Kc)F(eAXhsQ@#4-PV`1jyt1w)iL?*dEc67 zOtQvGi&3)B>U17`A$b9s|D46at><2^S$DDt#iLew8ct2dzZkTLi5fv7*5kbYCAX&U zs=0>udd3_z4k#?~XnGb1kPV`H0)ccgwIhxZva@)I|7y{iRbP zart$p1c@kR9Ez*Mh}&}Gngt2K)w9>^y8erS{rmQS3&fhjX$$z6E#w?ItJ2)4SO^Yz z6S_--6KGC*lB12p;*{Yi&XXw(u-^52eEPW)MgVaygqr#vO)wWFRk+qCGSwWBCcWqp zHwUamngw@3e~}E`rHOrw^!kA_jIJZjnkP}e1+>plCDydTyB{Du#+YHnLzq}{U+E%L z)8S66E_20ZhIZhWaYzuRl+O*^PR`}__ejC zYhdZ_jGL%YYN>}9D0onP`}U)eSWZ7)h z{$RYW8|Dy_2_+Z6zE?ow(~H36+9D&pVLKN$n(AMB$-#oSN)A6dEXv-ctmZrO+3QF_yGDSDKwHm_h+#GhnY_>pl8*_rZ5) z8<9k6XgMF_z|`SPl>O#Z;)7hc{WLq{(f~Zwe=OGS+D|e*6i@B&e8aJB!yCV60Chq! zJZTd3$)71P(09`Uex~f;jN%bPb0vi0Ou#zxa?E%49Xx$H@%`)t7yOn<4L<~i>D%{a z;Ryx45+d>K61$~Z7JLTOQ#>;2Sp>CjzJv$;;hu0TLTsJlA^MoycOmNOSGm(K?}8%O z>*RcNyhD_qeaAgaJTcQ@%vB~+0sU|Rwn?7>p!O@h z1wQ0-4t9B6aoAHitx5lCDeu^=S>>UwdMRPmNH8xey}WWgG12R|<~Vy4S~k)5hw%dk z=}!--&rdYrmpRavmA1$Z@mBf;w}?9s1o}9beiMmLW!EHjHT^tBIQiRo2O+ghH@C@C%0m6{%nAF2;<-O*AQbNsH13wjLN z@^I31;x8>doS1D&C#P*3`bi*LkK zINGtr`R#*RhDFG)a$-K8x0S~4yY_RVRU;TRy5viNlS*%|w)HFSzmeG`-CrNWO}#wI z!}8U^W`ZW$L_MO-9`lCH(eny_%!3dzL%KB?>(!XJDP65pRe7Bhc)uLB(4Ma~38HH} zf!*FyBn@ueVpU=G?g&-=Hid@}8@BOHJbJWdy{XoXnR(<1ZI8(xT2d3tAv%jDiRUKl=q$8-cdya zHQz*7Qhwg;fjol2bUbanP();K@8QHr%kx5S?>a4gx^5;GIi0uq)4l{UXT}el4hn@J zh;zeMYwWsa%>3tYCaH1Oq10EOQM7*lK9b?MnYpP6T1GpftNXb_px!41*-vH~&}QIA zMSa^=SNKz7g$3+8`IeL>fs?JAZUgh^@S^>_tk+7vW#rp}P^cBCFoS#O6YQLndTY_1 zIe%;o0#EYExFhvh0dbhV>p?p^!wUpZBw@8HU$Ui=?Z`A6YRw3_>scb0y#7&h8`jL< z3vjy@zGGZ(bcPgHb}uMzC)or;^ZDMps>bPo2H%d<=c`>GkC`G53xt7_S5U_ z$Iffv_STE*5}mNTSuGQm%=rQPI8YDk-gqI%ZTw5uotvh&EN0Z$%Gewob3N9=5ADWb;3R0)-O&w|Etj78_BCiD8$;v{g-!TdYt* zu9_g6%Aq-GVZT299n_S@e5uU#spH;sWY%l4bK&5u{)2tb)4A=k8}mC|VR^hnPHOHU zH{sC6kqH3u#UVS#oR(85L%~c-sj+$`wqLeZKL2pTy)G?zs%mS+)zU6xzFBYfcX2tJ zMQu~i_JkE>W8jQj{?E`BTP#UNGJiB=9DS%u%K__RQ(zhTdXMfqnLt7mxlX)ZvYl9g z@;vb5k=?p`R$VM@GY4Y?p_MVU11cFs>TJG+uwDT4DcFcG*!t_&luTw2v%K#9HTW4& zTCu}d>|WWWmp&aol3%$$o5-uOtvBf4K@(+ri|Y7BUOiqtCNf~6h*|{%6sT`B3tB}p z*O~t%*Bk)*(j&8_)p3+{RqjM4o6`3iO0FM9^4_w;_D{qYOe_f1>Lu=Px7!R&?QQNe^LgUYHUk9=JB z8~3kE=#p(#A07UD{?huD{v8EvvRmLhICLjXn;8TTzUuAv%7JGuEu9Nw!{=o^-u+fR zZ}hHmT|E*Y+M%CmE4xPx@zy;l9hq6)=@eytn!Nu!Yhx=rZ*Dr-rr&QC0qI5hEnMLK z^V1FgR&1L8~n^3xQ|Wu1)!e zdKFjEE3!g)TZ`nwE#&h;k;)$Zm!%2qr!egMfLkq@{AU0~%{PiZ?PZ6zivAsDb=5@f zdX5gw&0gL0%|K@-)nZ1ag1(t;7jW#nd9=RV0d*JAp~a^ToyZ^Gj}TxDcPVs@8Sbl* zR(Y{P&K!R#xlTwSoeb~c8O(kK1onHfd16bTS@S=4Kj>U2qzuYzxo8c-n{`_?23NI<<);}GzI z24v>)QC|%r`-Vk3G4`Y1Z%TFyxsjK|*F0g;cmP#tJOplSZ5(|SJG`?zT-dpZHkB#V zu{l^Wpl?*cl(Qdsd>A>3th&nCnTE4U02ya&k|BQpd``$Tt2F$Qr(8|(=Gb(qQtygq zE)i2G8OLLl*AbQeoJWD!)ZcR3Up7)_PEha-u@0QzyH>x{K80$@#Vg}z$xSxSUWQdN z!vrDOeDRbCVw_tGCXwNs?$k4-w2$jbPMn5|EcHzNLO+SPOL|#|cD7O5Jg4;-nLdTq z$f@QkGYv3$`-d`=a-%ckeE(Mqk1#WQHX|DK3^0y{AA|f_@lPi=6#ulJalt1qm$%qY zK}^S8*tcY0mAhTB3mo`4vcbfIJ7V~4H0HwhKb^yH{inGvjRT@8@}?3$+*Eh5n4s3I zSNx#DdVlvd7L%0*{H1;hW{mR#4a<^ZdR2yDNCFhLH@6&bH4f^mh$^4CD{Lzk)6i*e zPPjYMPwwNCbF^ni{Vc{*DUHv_Q2NeVBVM<0c&SzYXbx`8zW<{(zy-_lh0DDz=(%#q zzwPBVaUQM9@$!DfCp(uY{F;^%;y%huLH8P@4i{?1{^0a6r!GRio4#PZ8R{}ur& zz5wUugJJE%cB^yO!ui3+d7`%xci&uMPR+RQ|JU-H@7Zp?{QllIkLmuIGY%w$>J}|w zoD3X&syMDZ`J7ceU;Rn556A!Rt$*=2M*m3sPqqCb{~6u^SC}oHwsY6iD?g*UG*)S7 zEb3wyXnY0d%uT31o(Uh|4pP1N^)J%@Gw9p7U%e%}Zsm#!;lq#4M{KzKcA+>Iv)iQ; z?^0FX9h$I%wZQiCJO`QkN2Jv^|M32(;J-p`VZmV^qti0FQqA8QTc7aE$+h7rvVOL! zzrC{_IPsnHac%3Z4LhyzBV!^bxTS$9dSEX(R`9bXF^^ zS|P!}c!8@qK^GV1ETHRK9irm$tI#C-WU+ z|D#q_{+DZ(``_R3|J3?__ayD$y#GP-O$Ymj#+UcM2)Shc{?>nnk0$kp(wEm? zSh=MBKCtceC}UConk(;rD0~axN3l%)!_1fWzi4I3e}7y5W0uC^*QVD0IBcgd{}Z;g z{@3cO{O|92;Hg*cD9-KD_;nWOswVzX2LhvOGz3S};AkcpM8!-^oW;hrkZJndF9T2X zNX7;_23ZM|eaN1EeXH{7SKrOw3Un?{ILdg=f_eQzS5f1&ma9GcOdgAu)c?N;02A&Y AFaQ7m literal 0 HcmV?d00001 diff --git a/LDP/howto/docbook/Bash-Prompt-HOWTO/clockt.png b/LDP/howto/docbook/Bash-Prompt-HOWTO/clockt.png new file mode 100644 index 0000000000000000000000000000000000000000..22f7da888586fc34052d9dbbb795e2002ae27d2d GIT binary patch literal 7285 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 literal 0 HcmV?d00001 diff --git a/LDP/howto/docbook/Bash-Prompt-HOWTO/dan.jpg b/LDP/howto/docbook/Bash-Prompt-HOWTO/dan.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78255bd731c81f84d40db3d876548a4cdce33a99 GIT binary patch literal 7853 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 F{{c6Hsn7rb literal 0 HcmV?d00001 diff --git a/LDP/howto/docbook/Bash-Prompt-HOWTO/dan.png b/LDP/howto/docbook/Bash-Prompt-HOWTO/dan.png new file mode 100644 index 0000000000000000000000000000000000000000..806006227015954ceac3fe9ea42b2300aa6b5b3c GIT binary patch literal 1351 zcmV-N1-SZ&P)V>IGcGYOVIUw%W~u(3`KiVy~zK6truBj;VOmz zx(Fd2rthiLR5w@;WE;yore7~Y2qArN@Ar4H{Qi*FN>!m;5?n%P zVB+45(n%1FmmEWzwh!bE2&3@~uAi%TFU5t)0a8`2r>NQB;W%-navY8L&(Swh#XW#L zBX#Z=Y3}w=Vyo(Ra)h{{%ScMVhfd#!2KE|rc!y7|N%bIZH{!DuyvlFI*kR4v(EK*` zn*;5#RRKd%S{og+SKeJXT0j2IU&cj6FXLe>M0l*{%Af(JbX_{hE^! z_bd-Y9@{cVfzP0@TGFb=cCnGKajNfLJpAdqYL`xZ)srDSyXIeTpvlT;*n(!33V|}8 ztp2mi48p*>enHFq#I}`rx)F$;lpvl!}OaphFtsyeEiz$OIV|$I6 z;P>Puw~b53q0b;nO#4XPtfJl>mqi3@eK9~Qiyoy074n*5ld4ZKvL_m z*U(uyb70{w zn2B$bSN{JRVOZeXfsc9r= zgcXb`*RUnSKq`4ECK*REaudp{Zo~)ZrIbw=_n>eOZ$2>u`skq#KPTx4s(Tp>Qf3dwi8t-M0NW6*hW|W* zxdwSMVM9T&Tq?0ibvijhys6759-r?KQs`u_K^{i$Z_2x;;+J*zx@N_Ti?=;X;0ZYs zTh`!}YvhSN{_17jkiq~@TC_3OAP-~5RbHEK6Rz5A?>Go~5{LXcbahQWey#9*&kFlK zIFmw-nooStl*%V-iQD#2-p!5=~nruR4HZBj{Xa=bK$ z(&ULg(Wv$s*ide+SPtw9E61gBLOveN6vnrVC!hl>j6>m;EP~26>p2?+|E_~m4zfUE~+bO z%R!WtelJ4B$jHdT%)-OU%A+LAFRb)`7V-yxg8{fq{RKoN0#I{MfjFqhU4Rf}2WYAO z6yU#viW)>iOGnSZ$iz%BXkZ7ZsX!oV8W1fl4GqOQiSiww;h^OdR@9?AZS6@f63(S` zGqaRIRR47cx6SBJF^E^hEk>p@XL)$fiJzB{l#*6fQB_md&@{MgXk=^xHMO;~cW`ua zcJcP{z2@g15EvO19TOWDpK$xm-PE*u_Yqmyk8*PJ9zV%PKPxM*sC-^k{pOGQhQ_A1 z@7{mx?E2K*)7#gN!G0MV|2i=_HUE8KacOyFb?wLY&hFm+!Qn5$(Qhs)0Q46Y<^C7g zzi@F-xTtApKs5Bfxu~dPDGK7Cp%qr7}kT1w=(j9*6_b1qdXBp!bv_fB;S%3iKIbtlm$k{?{rpeA^gUeJsuRy*uR`wfsz^+Pkb#wPIPt*0 zi40grlL1&7DYb#t92e4kP{~s%_U(9MtakV{WNO;z?qX98SG4RMs>>zK_u1j>(>>#* zRZ!0EXJF0k;c&Odew!9*hxyp8F?qFLFKQd(?3RKfYIMlJ=xOm5#mSn%j>u(B(R2j} z(kFXJYa8L(9CyLDsps)_A5(9HesSb__z`w~S57upwJ{zeL0~aYh3)9^XbZuTl>=)l z;;e#Mxuj9m5!|T}kPY{U(Bk2NeF>(ZQyU`hjlNnO;@dJ@53$P-t9wS{M0X>{n@)^; z;jopP8guHsr!uI>-=Dc#hf4F?mm50z6Vt908bS@&4y4&=u(*C-4MZD0;8cT^EouW|whoqee*zQCmN~c~fF~11P2gkS3n-EA2-=$>{|DG!P#(bYy3zAI`wbzE>n;B=e9b!f+BS#xDFo?T?=yqF*|iKD(=7Z18gXmbYdZf2^};zjc6=SR0jw<;7wwd9KzV>F^(@?{zzx zAHYlPt4HmA7%>J(;*v4#?#KpTPu7`FJDaI{x@}XcbjRgU6wNLXeguf$ z&5(A8Ss@VH@I+El-%tsEcQ5WN^$IwxL*{nhMhU6G?AnE!txhcIjg#HW-F%hcm=ieD zO%*DZ7#*kJgQd@YJmBKnKg$uzL!hwHvd*Eq52d=mqg zj@Rg?D+mWm0Y^B?caz7c8&M0|=1^n1#i_lwRYBn*^r#s}+mUKcR+Xoj;!aD(=>_~s zb6=vK=3F(l?tSU$tGx8Ouuvn)g4F(#erWRHa~}ISrq)nVos1i0U?x#eAdq}`BlIt1zFjg1$-9QpWZ~a+@y6yj9FF5LC)zdGitY(%L}AglY-HZ- z+0d@n0qsOhk2fJi$H!{di8CHe3v0i=9Ga(LLpHf>Y{)?CRm~00FKoZa0Mp<-*T=m% z<&ML&m#!LPMG4qiIZnrP4w!3~YIW`+acJ$lrL!bkJ}+z_#pWqH2V3+9-~!YnW13|Pyjt>2UmgeW*S3En|QX3jiCe8)`6 zT``Ic@K$^t4FE|N7J)7LBk1@V%~!gr9~eA0dVBD;y)Vb=_fA;dr31sW3L*lBXA^=j zZt_8svwLS&VSUlUl)s-Eblf&G#w_~$vkcXybPzE!Hc{+Hx&6Hl7vp$HIqvVD&aY#F zJlu5f$(4Ecni}(DYisutTVn|*E$!FoIO36&XbdkySHexb$t7gS>@23hrSFr93$`lNW?T2)AMblJ$@(+xK+-bR5Sc@bEvhGauI%UzW5s^BZjympG5zX>YC)k|3CJd*YNW%gRlQ7|?Z=l6}Hwf@Y( zw(^E>t}hF>;vM%e%Q`ILkLPG;twn8CJBXRR&$~X^qsAfevD}64&f|Kr(p*a3Y%Oy_ zmUSxE%#CJTAB@XL*L;+I@tiLY2>)8THE6cddIDDtKARRrI1P2b5Q|Z2J>IGePUPNt ziJ9Vyw=ymE*MJ&J8O0@cm+Z#UFTI@K zSQ9aO9n{ZYVdhQ0+jqoN=_=(`AOEIo!2IydYjt{>Fsp4QqRMEdl2wO2R@M938)IH@U`q9Z9pu z%sQf_VhG?8=w-y?F6uJ*9va2)#Q{}LdyWTm|AL-Id2JELq8|+?KeGX>UQx#L{j<5ni>=7En z{N7E05-)?j!fLv!^Hgd`@bNplxU%%BA+r#K$0N2hSz{IV#3)qvc$jNc^C4*D>H;E{ zZ(=f(a~{T=#TVtRWumc~7>U2~{w<{~_=}t(7ENA2MMP5Cf}da%hD52pklGie>ZXBT z1CC}(D5Y793_PYkX@#%nFu6Wk!&sCfU-yDg9hL@!(Stjr&qP%|c+s+7qw4nxOu^|Z zwFMgkS1@(2RzzpjkJp;JFAxwqLk&)P_&D4szOHX;DT29|bH-%UY-?w%jCITjnR#5@ z3e_GC*BTW5tkL%zZ&Hz4$sJ&1&v)z1+G>!~x8ZlSaz5ur9leD?LE#^(_l7M$KE2b> zmUYOXC03_^d^L9$q%HWYWXaYtynOf-N8Iz<3=f)^NlAf)knUi?DX)3v`&>`ySw|Mb z3p0|(5b663jTfO~i-Bx6rc8%UTs$IH+k&T#{0*qT4OW;b%I>7GS?B~8LGY`A%mL+X zsBJm%SZiie$Pka9;@TI~#Xv>);$YBXs3H!fHg{%t=E$!y!M}KBMuRkfJ)0B5`U9|+ zC|;33#+3KT?-0pAe`g#b!FeM&IQEc}KSYfetL zSQ_hWs8MH{4HR<*>bLUw6?n{brB-a(JmfHW!31?ynK-6Qo=m z8usOj^XiwE4ih~-w>IN{0leyHgfvqBZtFZ@=&c)sCG%hd*I)tUq)jr$N(JgC2ljottV>%2$%=B zPT?BsxJ%vopT0~BCp@OMtW4HrstYu1ITfRyNACkpNe(H0UEH}ZQZ@=-yg+}UX@t%-FE-a93zZ!3IW2O@V9!b#=< zA9@eATY?(+Y-o)XZ=$3JILqX=L}~S&tBdXN+DHoooZnNe%pEE8j#o(xDsPQBxuS8s z^1i?mM}{yWOclFz`;#KKj}6dyGn4d{47k_3YrW8|ubwpI+3D9#X=EzVcNHw&*T*eo z59mfyoo{7n8w-*&9g>Gz)b-QGR5LEOh(6{vpwH>zt^fWXfHER10$@gcNJzzUQB#Jwg&F zm;H2U81$+PouBOp-K0#}HUJtSN$nIO$coc1nrRUAFkS7pS1{5%S7R7!Gq4?1m3S`t dTt=u3Oyt`Xh5W7Qe;odQVoLsvm~_dL{{S%X#cTio literal 0 HcmV?d00001 diff --git a/LDP/howto/docbook/Bash-Prompt-HOWTO/elite.png b/LDP/howto/docbook/Bash-Prompt-HOWTO/elite.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ceb8700f6240a673abd3e9173ca8b8372aed26 GIT binary patch literal 1690 zcmaJ>do8hE{E1gb~QAH8YOofze$;i5hS3M@x#aoGZgjA6kEsfTKSZNit z(CTQtt=`nsqewd>)T5*$rImOE@yfD)_UG;&-@W&{-#Ono_ndo~&Q1>CW17bR00841 zv9181Fe5;M#qFw zBj6SYGgC4g?iv_}f}5F}m|L4zTf+6_4)91a%|8TghA=mnR!86gKye3;#kgO&w>*u{ z;ha?ioNGCd*i)hofn!4@&LPNX>}@&Cok9#8I{e*}8p z4y44s-dyL8EdCO^DqyL2|8VL;j!V2oQ)5W9q$V6Tvj)SQCt2`M#f|09)F{e?go<^- z{-oXnqEKwpR6P=F`k}qppv$7y?TIlj&+eA3(Wp}GtJ|>CGy8<_9!nEs56PpgJEM| z$1!(Am0Vqnx6VO!ibo-=(dT*GINIAIi|R&XQT(KC+H zJOSX@rU`^}10&(+U6Q{zBLn=iF?!V-^YVwu9tVa$gGpcA;p>jg{W%TT>W4}z3)?d; zI@M(V^z^F!6yZi-jaogfpzvYG9g@@RzR1}sLh){j(gs|naxuAb)$T^5Fy(NtKA{TiwFGeFNyBrv{%z4O$Q`I00+z5 zPw6`(;hQ};{q3!rZdwoMAVz`L#R~L0VV|!HDw?-Dk(cJZL5OC6CJ}CYx5kw!w2hS& zZda)40hO@&N@LsV$&$D;oDU34r2T&E@!y#b-U>SN&*4jYpV;26bwwIWqx|N*b8l%O zPSh{2>4(v7lTyhEk+U2R=)JNfKfzmVPBl^Vm6|2?`#{_s?fkFho2S(^1RQQ>t_8eJ zT~AnfVq#a>vLV!(ylx{{)+`S)4{u76^_%pDJ;$v(=&RrQ|?7PRhf)F2sUb!@krEUf$j zviQkJDbYid=gJ%p#{1Y}@G+1+u12N46QtgI({z}TsjmoZY%q)04*^rO3Z8Rl;2z3(|kHr;dY zS_ugy zJ$?qA92@ z=$%!cl>x~`sHE1NE`IlL^;-Vr%p*X|lA3f@Gh6xpzVm;xxC7ukWg3##=VmD9Kr}o7 a2YLm9LC!*b)CY?GmEmzt*e75AnDP%zjwNmY literal 0 HcmV?d00001 diff --git a/LDP/howto/docbook/Bash-Prompt-HOWTO/proml.jpg b/LDP/howto/docbook/Bash-Prompt-HOWTO/proml.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6448c471511b9d1b80d4c68f7a822ba1f310dca GIT binary patch literal 15045 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­3`jA$SDgsl?`LU5H^TYe>f zz`BUw%93_`R}U>50{g@Ko&6g7!PJI%07jvh=d3}bj~iOgO>U*Jh5h@tYR~@wIzePg zuY?k0oNn@;5V-A)z>XfEscg)LPr`5T^uu&VIgbP$&8_uSnKWi7@L2~P zYitKv172Fp!xoZ7TgSzofvQHf|8kRlwe)!@%!di1%-6%`JL*tg0g(gR|G0qpy0`jz zKKXtoYJd2o?Cny&1?hliqdM|)KM}Jrak(es9**nP?$}wG3F*gMzELN>Uu8&(S);(7 z%EWnYV}63`(ruLs!@`YsuA_)GhjP`WXTMFWgB;JMozDVF%k5x2D=;#pWw4(zbN*KG z_eS<~YXv5ckTwk{8$pwGAztACeNrU+#zZp{*wFkO>?)7pL=ZY;QK;T*9F0*+wr$9~ z^LcMbsePg$J62CMUY0#FV>0^nt#B1K#dZllx5vgoZ>HDi%?94Gf87NN|G*$9t=9o- z;c%EXT3qw6yft^L5`2m-gg)K4dPxR^Qnu5{H)XtuE0C12#%cyZ?jpV{R&J@ud@2&> z^oRSyN$ebUd`^p&WmUH6n^)#c6Y!hg-O+QuqW~Z&0KnN#p5%`Esg^)I=;4W3o*O1x z!`=o(YuOjz5ZYcq2AR)Bo~^cVF=f)z?B==Jnf&xx!pbr;&Q70dOz1TcRdOW6RLtS>e?J_FbH> z7RfE9&^9(&(UP}^;$4#-o~Rnfk5(-P>M z>M^5K@bx0|El2_TW|w@=nup782V4$mldo(2vRGq7apBq*SodJ?J&iJLWPI;x#>$kp z7%TD@y*$)>Q*!kOP~#uJYhfS0%M3d6+ikr3ojyGzIVAdhSl1wg2Xz{&gLeNi3VCxH zU23r@RVtN{EFbGlvd^!Hm~qPk5&~D+K&_?Dn{r)?Zl~|=~ zhF~a0Z1-FFV+1D8Xgoe$RcrxNLayo%PU^{y7Me2^9(v1`%xq*@Wyi_!NhVIqdqCmG zVAq$`jQlu65vYjAF+N~>Yhz*HqO!WV9l=!^O2tn8ARpwkXkRdrlU6Ue=c^`2Kt%hv60QBdvxZHaVOyXLc=<>&2;K{tz z?axt~YcQGOxx*n3ucBG}z#&NA;27+h$6TdXe(qHOTrX3>8? z8dnYmSm)ML`7c)g+B`~>zN%*=|7nuHddz>C1lza%(@Xv{aQ;8?C6*TR{e|=Wo)X%8 Y1y5@&-Mc6a^z%5GjNC_nihrj62lnth-T(jq literal 0 HcmV?d00001 diff --git a/LDP/howto/docbook/Bash-Prompt-HOWTO/twtty.png b/LDP/howto/docbook/Bash-Prompt-HOWTO/twtty.png new file mode 100644 index 0000000000000000000000000000000000000000..120f97120e6aa734839a5751a20d6045dbac920b GIT binary patch literal 9187 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, Bash Prompt HOWTO -Updated: July 2001. +Updated: August 2001. Creating and controlling terminal and xterm prompts is discussed, including incorporating standard escape sequences to give username, current working directory, time, etc. @@ -405,7 +405,7 @@ potential effects of a security compromise. Cluster-HOWTO, Linux Cluster HOWTO -Updated: June 2001. +Updated: August 2001. How to set up high-performance Linux computing clusters. diff --git a/LDP/howto/docbook/HOWTO-INDEX/hwSect.sgml b/LDP/howto/docbook/HOWTO-INDEX/hwSect.sgml index 493f9544..3be416cc 100644 --- a/LDP/howto/docbook/HOWTO-INDEX/hwSect.sgml +++ b/LDP/howto/docbook/HOWTO-INDEX/hwSect.sgml @@ -100,7 +100,7 @@ various issues related to this. Cluster-HOWTO, Linux Cluster HOWTO -Updated: June 2001. +Updated: August 2001. How to set up high-performance Linux computing clusters. @@ -845,7 +845,7 @@ Linux-Modem-Sharing Modem sharing mini-HOWTO -Updated: July 2001. +Updated: August 2001. Describes how to setup a Linux system in order to share a modem attached to this system with other systems over a TCP/IP network. diff --git a/LDP/howto/docbook/HOWTO-INDEX/miniChap.sgml b/LDP/howto/docbook/HOWTO-INDEX/miniChap.sgml index 8f994e39..e04693c0 100644 --- a/LDP/howto/docbook/HOWTO-INDEX/miniChap.sgml +++ b/LDP/howto/docbook/HOWTO-INDEX/miniChap.sgml @@ -754,7 +754,7 @@ Linux-Modem-Sharing Modem sharing mini-HOWTO -Updated: July 2001. +Updated: August 2001. Describes how to setup a Linux system in order to share a modem attached to this system with other systems over a TCP/IP network. diff --git a/LDP/howto/docbook/HOWTO-INDEX/osSect.sgml b/LDP/howto/docbook/HOWTO-INDEX/osSect.sgml index 74603ec4..8e14f91c 100644 --- a/LDP/howto/docbook/HOWTO-INDEX/osSect.sgml +++ b/LDP/howto/docbook/HOWTO-INDEX/osSect.sgml @@ -986,7 +986,7 @@ Bash-Prompt-HOWTO, Bash Prompt HOWTO -Updated: July 2001. +Updated: August 2001. Creating and controlling terminal and xterm prompts is discussed, including incorporating standard escape sequences to give username, current working directory, time, etc.