source: postlfs/config/profile.xml@ 3b7081ba

10.0 10.1 11.0 11.1 11.2 11.3 12.0 12.1 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 kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts krejzi/svn lazarus lxqt nosym perl-modules plabs/newcss plabs/python-mods python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition systemd-11177 systemd-13485 trunk upgradedb v5_1 xry111/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since 3b7081ba was 3b7081ba, checked in by Bruce Dubbs <bdubbs@…>, 20 years ago

Minor grammer/spelling fixes

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

  • Property mode set to 100644
File size: 15.1 KB
RevLine 
[78b3cd61]1<sect1 id="postlfs-config-profile" xreflabel="The Bash Shell Startup Files">
[bae6e15]2<?dbhtml filename="profile.html"?>
[b554263]3<title>The Bash Shell Startup Files</title>
[f45b1953]4
[b554263]5<para>The shell program <filename>/bin/bash</filename> (hereafter
[64d97b7c]6referred to as just "the shell") uses a collection of startup files to
[1a396398]7help create an environment. Each file has a specific use and
[cfc2a54]8may affect login and interactive environments differently. The files in
[8604d92f]9the <filename class="directory">/etc</filename> directory generally provide global
[cfc2a54]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
[1a396398]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
[3b7081ba]30waiting for user input between commands. For these shell invocations, only
31the environment inherited from the parent shell is used.</para>
[1a396398]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>
[b554263]40
[766bbe40]41<para>For more information see <command>info bash</command> --
42<emphasis role="strong">Nodes: Bash Startup Files and Interactive
43Shells.</emphasis></para>
[b554263]44
[1a396398]45<sect2>
46<title><filename>/etc/profile</filename></title>
[cfc2a54]47
[1a396398]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>
[b554263]55
[1a396398]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
[766bbe40]58bash</command> -- <emphasis role="strong">Node: Printing a
59Prompt.</emphasis></para>
[b554263]60
[766bbe40]61<screen><userinput><command>cat &gt; /etc/profile &lt;&lt; "EOF"</command>
62# Begin /etc/profile
[b554263]63# Written for Beyond Linux From Scratch
64# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
[1a396398]65# modifications by Dagmar d'Surreal &lt;rivyqntzne@pbzpnfg.arg&gt;
66
[b554263]67# System wide environment variables and startup programs.
[1a396398]68
[b554263]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.
[1a396398]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"
[b554263]87}
[1a396398]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
[b554263]103fi
[1a396398]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>
[b554263]135
[1a396398]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
[b554263]145fi
[1a396398]146alias ls='ls --color=auto'
147<command>EOF</command></userinput></screen>
148</sect3>
149
[b554263]150
[1a396398]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
[4faa9b91]157current working directory to be executed without specifiying a ./, however
[1a396398]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
[b554263]166fi
[1a396398]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>
[b554263]184
[1a396398]185<sect3>
186<title><filename>/etc/profile.d/readline.sh</filename></title>
[b554263]187
[1a396398]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>
[b554263]192# Setup the INPUTRC environment variable.
193if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
[1a396398]194 INPUTRC=/etc/inputrc
[b554263]195fi
[1a396398]196export INPUTRC
197<command>EOF</command></userinput></screen>
198</sect3>
[b554263]199
[1a396398]200<sect3>
201<title><filename>/etc/profile.d/tinker-term.sh</filename></title>
[b554263]202
[1a396398]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
[b554263]215fi
[1a396398]216<command>EOF</command></userinput></screen>
217</sect3>
[b554263]218
[1a396398]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>
[b554263]225
[1a396398]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
[766bbe40]266<command>EOF</command></userinput></screen>
[b554263]267
[1a396398]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>
[b554263]276<para>Here is a base <filename>/etc/bashrc</filename>. Comments in the
277file should explain everything you need.</para>
278
[766bbe40]279<screen><userinput><command>cat &gt; /etc/bashrc &lt;&lt; "EOF"</command>
280# Begin /etc/bashrc
[b554263]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.
[1a396398]293
[b554263]294alias ls='ls --color=auto'
295
[1a396398]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
[3383489]300#export PS1="[\u@\h \w]\\$ "
301export PS1='\u@\h:\w\$ '
[28a9992]302
[766bbe40]303# End /etc/bashrc
304<command>EOF</command></userinput></screen>
[1a396398]305</sect2>
306
307
308<sect2>
309<title><filename>~/.bash_profile</filename></title>
[b554263]310
[1a396398]311<para>Here is a base <filename>~/.bash_profile</filename>. If you want each
312new user to have this file automatically, just change the output of
313the command to <filename>/etc/skel/.bash_profile</filename> and check the
[cfc2a54]314permissions after the command is run. You can then copy
[1a396398]315<filename>/etc/skel/.bash_profile</filename> to the home directories of already
316existing users, including root, and set the owner and group appropriately.
[cfc2a54]317</para>
[b554263]318
[766bbe40]319<screen><userinput><command>cat &gt; ~/.bash_profile &lt;&lt; "EOF"</command>
320# Begin ~/.bash_profile
[b554263]321# Written for Beyond Linux From Scratch
322# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
[1a396398]323# updated by Bruce Dubbs &lt;bdubbs@linuxfromscratch.org&gt;
[b554263]324
[64d97b7c]325# Personal environment variables and startup programs.
[b554263]326
327# Personal aliases and functions should go in ~/.bashrc. System wide
328# environment variables and startup programs are in /etc/profile.
329# System wide aliases and functions are in /etc/bashrc.
330
[1a396398]331append () {
332 # First remove the directory
333 local IFS=':'
334 local NEWPATH
335 for DIR in $PATH; do
336 if [ "$DIR" != "$1" ]; then
337 NEWPATH = ${NEWPATH:+$NEWPATH:}$DIR
338 fi
339 done
340
341 # Then append the directory
342 export PATH=$NEWPATH:$1
343}
344
[b554263]345if [ -f "$HOME/.bashrc" ] ; then
[7008de1]346 source $HOME/.bashrc
[b554263]347fi
348
349if [ -d "$HOME/bin" ] ; then
[1a396398]350 append $HOME/bin
[b554263]351fi
352
[1a396398]353unset append
[b554263]354
[766bbe40]355# End ~/.bash_profile
356<command>EOF</command></userinput></screen>
[1a396398]357</sect2>
358
359<sect2>
360<title><filename>~/.bashrc</filename></title>
[b554263]361
[1a396398]362<para>Here is a base <filename>~/.bashrc</filename>. The comments and
[8604d92f]363instructions for using <filename class="directory">/etc/skel</filename> for
[1a396398]364<filename>.bash_profile</filename> above also apply here. Only the target file
365names are different.</para>
[b554263]366
[766bbe40]367<screen><userinput><command>cat &gt; ~/.bashrc &lt;&lt; "EOF"</command>
368# Begin ~/.bashrc
[b554263]369# Written for Beyond Linux From Scratch
370# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
371
372# Personal aliases and functions.
373
374# Personal environment variables and startup programs should go in
[64d97b7c]375# ~/.bash_profile. System wide environment variables and startup
[b554263]376# programs are in /etc/profile. System wide aliases and functions are
377# in /etc/bashrc.
378
379if [ -f "/etc/bashrc" ] ; then
[7008de1]380 source /etc/bashrc
[b554263]381fi
382
[766bbe40]383# End ~/.bashrc
384<command>EOF</command></userinput></screen>
[1a396398]385</sect2>
386
387
388<sect2>
389<title><filename>~/.bash_logout</filename></title>
[b554263]390
[1a396398]391<para>This is an empty <filename>~/.bash_logout</filename> that can be used as
392a template. You will notice that the base <filename>~/.bash_logout</filename>
393does not include a <userinput>clear</userinput> command. This is because the
394clear is handled in the <filename>/etc/issue</filename> file.</para>
[b554263]395
[766bbe40]396<screen><userinput><command>cat &gt; ~/.bash_logout &lt;&lt; "EOF"</command>
397# Begin ~/.bash_logout
[b554263]398# Written for Beyond Linux From Scratch
399# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
400
401# Personal items to perform on logout.
402
[766bbe40]403# End ~/.bash_logout
404<command>EOF</command></userinput></screen>
[1a396398]405</sect2>
406
407
408<sect2>
409<title><filename>/etc/dircolors</filename></title>
410
[3b7081ba]411<para> If you want to use the <filename>dircolors</filename> capability, then
[1a396398]412run the following command. The <filename class="directory">/etc/skel</filename>
413setup steps seen above also can be used here to provide a
414<filename>.dircolors</filename> file when a new user is set up. As before, just
415change the output file name on the following command and assure the
[3b7081ba]416owner and group permissions are correct on the files created and/or copied.
[cfc2a54]417</para>
418
[1a396398]419<screen><userinput><command>dircolors -p > /etc/dircolors</command></userinput></screen>
[b554263]420
[1a396398]421<para>If you wish to customize the colors used for different file types, you can
422edit the <filename>/etc/dircolors</filename> file. The instructions for setting
423the colors are embedded in the file.</para>
424
425
426<para>Finally, Ian Macdonald has written an excellent collection of tips and
[7008de1]427tricks to enhance your shell environment. You can read it online at
428<ulink
[3b7081ba]429url="http://www.caliban.org/bash/index.shtml">http://www.caliban.org/bash/index.shtml.</ulink></para>
[1a396398]430</sect2>
[b554263]431</sect1>
Note: See TracBrowser for help on using the repository browser.