source: postlfs/config/profile.xml@ 4faa9b9

10.0 10.1 11.0 6.0 6.1 6.2 6.2.0 6.2.0-rc1 6.2.0-rc2 6.3 6.3-rc1 6.3-rc2 6.3-rc3 7.10 7.4 7.5 7.6 7.6-blfs 7.6-systemd 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind gnome kde5-13430 kde5-14269 kde5-14686 ken/refactor-virt krejzi/svn lazarus nosym perl-modules qt5new systemd-11177 systemd-13485 trunk v5_1 v5_1-pre1 xry111/git-date xry111/git-date-for-trunk xry111/git-date-test
Last change on this file since 4faa9b9 was 4faa9b9, checked in by Larry Lawrence <larry@…>, 17 years ago

typo in profile

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/trunk/BOOK@2225 af4574ff-66df-0310-9fd7-8a98e5e911e0

  • Property mode set to 100644
File size: 15.1 KB
Line 
1<sect1 id="postlfs-config-profile" xreflabel="The Bash Shell Startup Files">
2<?dbhtml filename="profile.html"?>
3<title>The Bash Shell Startup Files</title>
4
5<para>The shell program <filename>/bin/bash</filename> (hereafter
6referred to as just "the shell") uses a collection of startup files to
7help create an environment. Each file has a specific use and
8may affect login and interactive environments differently. The files in
9the <filename class="directory">/etc</filename> directory generally provide global
10settings. If an equivalent file exists in your home directory it may
11override the global settings.
12</para>
13
14<para>An interactive login shell is started after a successful login, using
15<filename>/bin/login</filename>, by reading the <filename>/etc/passwd</filename>
16file. This shell invocation normally reads <filename>/etc/profile</filename>
17and its private equivalent <filename>~/.bash_profile</filename> upon startup.</para>
18
19<para>An interactive non-login shell is normally started at the command-line
20(e.g. <prompt>[prompt]$</prompt><command>/bin/bash</command>) or by the
21<command>/bin/su</command> command. An interactive non-login shell is also
22started with a terminal program such as <command>xterm</command> or
23<command>konsole</command> from within a graphical environment. This type of
24shell invocation normally copies the parent environment and then reads the
25user's <filename>~/.bashrc</filename> file for additional startup configuration
26instructions.</para>
27
28<para>A non-interactive shell is usually present when a shell script is
29running. It is non-interactive because it is processing a script and not
30waiting for user input between commands. For these shell invocatinos, only
31the environment inherited form the parent shell is used.</para>
32
33<para> The file <filename>~/.bash_logout</filename> is not used for an
34invocation of the shell. It is read and executed when a user exits from an
35interactive login shell.</para>
36
37<para>To the standard files, we also add <filename>/etc/bashrc</filename>
38which is called from the user's <filename>~/.bashrc</filename> for
39system wide initialization of non-login shells.</para>
40
41<para>For more information see <command>info bash</command> --
42<emphasis role="strong">Nodes: Bash Startup Files and Interactive
43Shells.</emphasis></para>
44
45<sect2>
46<title><filename>/etc/profile</filename></title>
47
48<para>Here is a base <filename>/etc/profile</filename>. This file starts by
49setting up some helper functions and some basic parameters. It specifies some
50<filename>bash</filename> history parameters and, for security purposes,
51disables keeping a permanent history file for the root user. It also sets a
52default user prompt. It then calls small, single purpose scripts in the
53<filename class='directory'>/etc/profile.d</filename> directory to provide most
54initialization. </para>
55
56<para>For more information on the escape sequences you can use for your prompt
57(e.g. the <envar>PS1</envar> environment variable) see <command>info
58bash</command> -- <emphasis role="strong">Node: Printing a
59Prompt.</emphasis></para>
60
61<screen><userinput><command>cat &gt; /etc/profile &lt;&lt; "EOF"</command>
62# Begin /etc/profile
63# Written for Beyond Linux From Scratch
64# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
65# modifications by Dagmar d'Surreal &lt;rivyqntzne@pbzpnfg.arg&gt;
66
67# System wide environment variables and startup programs.
68
69# System wide aliases and functions should go in /etc/bashrc. Personal
70# environment variables and startup programs should go into
71# ~/.bash_profile. Personal aliases and functions should go into
72# ~/.bashrc.
73
74# Functions to help us manage paths. Second argument is the name of the
75# path variable to be modified (default: PATH)
76pathremove () {
77 local IFS=':'
78 local NEWPATH
79 local DIR
80 local PATHVARIABLE=${2:-PATH}
81 for DIR in ${!PATHVARIABLE} ; do
82 if [ "$DIR" != "$1" ] ; then
83 NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
84 fi
85 done
86 export $PATHVARIABLE="$NEWPATH"
87}
88
89pathprepend () {
90 pathremove $1 $2
91 local PATHVARIABLE=${2:-PATH}
92 export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
93}
94
95pathappend () {
96 pathremove $1 $2
97 local PATHVARIABLE=${2:-PATH}
98 export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
99}
100
101if [ $EUID -eq 0 ] ; then
102 unset HISTFILE
103fi
104
105# Setup some environment variables.
106export HISTSIZE=1000
107export HISTIGNORE="&amp;:[bf]g:exit"
108#export PS1="[\u@\h \w]\\$ "
109export PS1='\u@\h:\w\$ '
110
111for script in /etc/profile.d/*.sh ; do
112 if [ -x $script ] ; then
113 . $script
114 fi
115done
116
117# Now to clean up after ourselves
118unset pathremove pathprepend pathappend
119
120# End /etc/profile
121<command>EOF</command></userinput></screen>
122
123<para>Now create the <filename class='directory'>/etc/profile.d</filename> directory.</para>
124
125<screen><userinput><command>install --directory --mode=0755 --owner=root --group=root /etc/profile.d</command></userinput></screen>
126
127<sect3>
128<title><filename>/etc/profile.d/dircolors.sh</filename></title>
129
130<para>This script uses the <filename>~/.dircolors</filename> and
131<filename>/etc/dircolors</filename> files to control the colors of file names in a
132directory listing. They control colorized output of things like <command>ls
133--color</command>. The explaination of how to initialize these files is at the
134end of this section. </para>
135
136
137<screen><userinput><command>cat &gt; /etc/profile.d/dircolors.sh &lt;&lt; "EOF"</command>
138# Setup for /bin/ls to support color, the alias is in /etc/bashrc.
139if [ -f "/etc/dircolors" ] ; then
140 eval $(dircolors -b /etc/dircolors)
141
142 if [ -f "$HOME/.dircolors" ] ; then
143 eval $(dircolors -b $HOME/.dircolors)
144 fi
145fi
146alias ls='ls --color=auto'
147<command>EOF</command></userinput></screen>
148</sect3>
149
150
151<sect3>
152<title><filename>/etc/profile.d/extrapaths.sh</filename></title>
153
154<para>This script adds several useful paths to the <envar>PATH</envar> and
155<envar>PKG_CONFIG_PATH</envar> environment variables. If you want, you can uncomment
156the last section to put a dot at the end of your path. This will allow executables in the
157current working directory to be executed without specifiying a ./, however
158you are warned that this is generally considered a security hazard.</para>
159
160<screen><userinput><command>cat &gt; /etc/profile.d/extrapaths.sh &lt;&lt; "EOF"</command>
161if [ -d /usr/local/lib/pkgconfig ] ; then
162 pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
163fi
164if [ -d /usr/local/bin ]; then
165 pathprepend /usr/local/bin
166fi
167if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
168 pathprepend /usr/local/sbin
169fi
170for directory in $(find /opt/*/lib/pkgconfig -type d); do
171 pathappend $directory PKG_CONFIG_PATH
172done
173for directory in $(find /opt/*/bin -type d); do
174 pathappend $directory
175done
176if [ -d ~/bin ]; then
177 pathprepend ~/bin
178fi
179#if [ $EUID -gt 99 ]; then
180# pathappend .
181#fi
182<command>EOF</command></userinput></screen>
183</sect3>
184
185<sect3>
186<title><filename>/etc/profile.d/readline.sh</filename></title>
187
188<para>This script sets up the default <filename>inputrc</filename> configuration file.
189If the user does not have individual settings, it uses the global file.</para>
190
191<screen><userinput><command>cat &gt; /etc/profile.d/readline.sh &lt;&lt; "EOF"</command>
192# Setup the INPUTRC environment variable.
193if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
194 INPUTRC=/etc/inputrc
195fi
196export INPUTRC
197<command>EOF</command></userinput></screen>
198</sect3>
199
200<sect3>
201<title><filename>/etc/profile.d/tinker-term.sh</filename></title>
202
203<para>Some applications need a specific <envar>TERM</envar> setting to support color.</para>
204
205<screen><userinput><command>cat &gt; /etc/profile.d/tinker-term.sh &lt;&lt; "EOF"</command>
206# This will tinker with the value of TERM in order to convince certain apps
207# that we can, indeed, display color in their window.
208
209if [ -n "$COLORTERM" ]; then
210 export TERM=xterm-color
211fi
212
213if [ "$TERM" = "xterm" ]; then
214 export TERM=xterm-color
215fi
216<command>EOF</command></userinput></screen>
217</sect3>
218
219<sect3>
220<title><filename>/etc/profile.d/umask.sh</filename></title>
221
222<para>Setting the <command>umask</command> value is important for security. Here
223we turn off the default group write permissions for system users and when the
224user name and group name are not the same.</para>
225
226<screen><userinput><command>cat &gt; /etc/profile.d/umask.sh &lt;&lt; "EOF"</command>
227# By default we want the umask to get set.
228if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
229 umask 002
230else
231 umask 022
232fi
233<command>EOF</command></userinput></screen>
234</sect3>
235
236<sect3>
237<title><filename>/etc/profile.d/X.sh</filename></title>
238
239<para>If <application>X</application> is installed, we also update the <envar>PATH</envar>
240and <envar>PKG_CONFIG_PATH</envar> variables.</para>
241
242<screen><userinput><command>cat &gt; /etc/profile.d/X.sh &lt;&lt; "EOF"</command>
243if [ -x /usr/X11R6/bin/X ]; then
244 pathappend /usr/X11R6/bin
245fi
246if [ -d /usr/X11R6/lib/pkgconfig ] ; then
247 pathappend /usr/X11R6/lib/pkgconfig PKG_CONFIG_PATH
248fi
249<command>EOF</command></userinput></screen>
250</sect3>
251
252<sect3>
253<title><filename>/etc/profile.d/xterm-titlebars.sh</filename></title>
254
255<para>This script shows an example of a different way of setting the prompt. The normal
256variable, <envar>PS1</envar>, is supplemented by <envar>PROMPT_COMMAND</envar>.
257If set, the value of <envar>PROMPT_COMMAND</envar> is executed as a command prior to
258issuing each primary prompt. </para>
259
260<screen><userinput><command>cat &gt; /etc/profile.d/xterm-titlebars.sh &lt;&lt; "EOF"</command>
261# The substring match ensures this will work for "xterm" and "xterm-xfree86".
262if [ "${TERM:0:5}" = "xterm" ]; then
263 PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME} : ${PWD}\007"'
264 export PROMPT_COMMAND
265fi
266<command>EOF</command></userinput></screen>
267
268<para>Other initialization can easily be added to the <filename>profile</filename>
269by adding additional scripts to the
270<filename class='directory'>/etc/profile.d</filename> directory.</para>
271</sect3>
272</sect2>
273
274<sect2>
275<title><filename>/etc/bashrc</filename></title>
276<para>Here is a base <filename>/etc/bashrc</filename>. Comments in the
277file should explain everything you need.</para>
278
279<screen><userinput><command>cat &gt; /etc/bashrc &lt;&lt; "EOF"</command>
280# Begin /etc/bashrc
281# Written for Beyond Linux From Scratch
282# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
283
284# System wide aliases and functions.
285
286# System wide environment variables and startup programs should go into
287# /etc/profile. Personal environment variables and startup programs
288# should go into ~/.bash_profile. Personal aliases and functions should
289# go into ~/.bashrc
290
291# Provides a colored /bin/ls command. Used in conjunction with code in
292# /etc/profile.
293
294alias ls='ls --color=auto'
295
296# Provides prompt for non-login shells, specifically shells started
297# in the <application>X</application> environment. [Review the LFS archive thread titled
298# PS1 Environment Variable for a great case study behind this script addendum.]
299
300export PS1="[\u@\h \w]\\$ "
301
302# End /etc/bashrc
303<command>EOF</command></userinput></screen>
304</sect2>
305
306
307<sect2>
308<title><filename>~/.bash_profile</filename></title>
309
310<para>Here is a base <filename>~/.bash_profile</filename>. If you want each
311new user to have this file automatically, just change the output of
312the command to <filename>/etc/skel/.bash_profile</filename> and check the
313permissions after the command is run. You can then copy
314<filename>/etc/skel/.bash_profile</filename> to the home directories of already
315existing users, including root, and set the owner and group appropriately.
316</para>
317
318<screen><userinput><command>cat &gt; ~/.bash_profile &lt;&lt; "EOF"</command>
319# Begin ~/.bash_profile
320# Written for Beyond Linux From Scratch
321# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
322# updated by Bruce Dubbs &lt;bdubbs@linuxfromscratch.org&gt;
323
324# Personal environment variables and startup programs.
325
326# Personal aliases and functions should go in ~/.bashrc. System wide
327# environment variables and startup programs are in /etc/profile.
328# System wide aliases and functions are in /etc/bashrc.
329
330append () {
331 # First remove the directory
332 local IFS=':'
333 local NEWPATH
334 for DIR in $PATH; do
335 if [ "$DIR" != "$1" ]; then
336 NEWPATH = ${NEWPATH:+$NEWPATH:}$DIR
337 fi
338 done
339
340 # Then append the directory
341 export PATH=$NEWPATH:$1
342}
343
344if [ -f "$HOME/.bashrc" ] ; then
345 source $HOME/.bashrc
346fi
347
348if [ -d "$HOME/bin" ] ; then
349 append $HOME/bin
350fi
351
352unset append
353
354# End ~/.bash_profile
355<command>EOF</command></userinput></screen>
356</sect2>
357
358<sect2>
359<title><filename>~/.bashrc</filename></title>
360
361<para>Here is a base <filename>~/.bashrc</filename>. The comments and
362instructions for using <filename class="directory">/etc/skel</filename> for
363<filename>.bash_profile</filename> above also apply here. Only the target file
364names are different.</para>
365
366<screen><userinput><command>cat &gt; ~/.bashrc &lt;&lt; "EOF"</command>
367# Begin ~/.bashrc
368# Written for Beyond Linux From Scratch
369# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
370
371# Personal aliases and functions.
372
373# Personal environment variables and startup programs should go in
374# ~/.bash_profile. System wide environment variables and startup
375# programs are in /etc/profile. System wide aliases and functions are
376# in /etc/bashrc.
377
378if [ -f "/etc/bashrc" ] ; then
379 source /etc/bashrc
380fi
381
382# End ~/.bashrc
383<command>EOF</command></userinput></screen>
384</sect2>
385
386
387<sect2>
388<title><filename>~/.bash_logout</filename></title>
389
390<para>This is an empty <filename>~/.bash_logout</filename> that can be used as
391a template. You will notice that the base <filename>~/.bash_logout</filename>
392does not include a <userinput>clear</userinput> command. This is because the
393clear is handled in the <filename>/etc/issue</filename> file.</para>
394
395<screen><userinput><command>cat &gt; ~/.bash_logout &lt;&lt; "EOF"</command>
396# Begin ~/.bash_logout
397# Written for Beyond Linux From Scratch
398# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
399
400# Personal items to perform on logout.
401
402# End ~/.bash_logout
403<command>EOF</command></userinput></screen>
404</sect2>
405
406
407<sect2>
408<title><filename>/etc/dircolors</filename></title>
409
410<para> If you want to use the <filename>dircolors</filename> capability then
411run the following command. The <filename class="directory">/etc/skel</filename>
412setup steps seen above also can be used here to provide a
413<filename>.dircolors</filename> file when a new user is set up. As before, just
414change the output file name on the following command and assure the
415permissions, owner and group are correct on the files created and/or copied.
416</para>
417
418<screen><userinput><command>dircolors -p > /etc/dircolors</command></userinput></screen>
419
420<para>If you wish to customize the colors used for different file types, you can
421edit the <filename>/etc/dircolors</filename> file. The instructions for setting
422the colors are embedded in the file.</para>
423
424
425<para>Finally, Ian Macdonald has written an excellent collection of tips and
426tricks to enhance your shell environment. You can read it online at
427<ulink
428url="http://www.caliban.org/bash/index.shtml">http://www.caliban.org/bash/index.shtml</ulink></para>
429</sect2>
430</sect1>
Note: See TracBrowser for help on using the repository browser.