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

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 v5_1-pre1 xry111/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since 4faa9b91 was 4faa9b91, checked in by Larry Lawrence <larry@…>, 20 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
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
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>
[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
[28a9992]300export PS1="[\u@\h \w]\\$ "
301
[766bbe40]302# End /etc/bashrc
303<command>EOF</command></userinput></screen>
[1a396398]304</sect2>
305
306
307<sect2>
308<title><filename>~/.bash_profile</filename></title>
[b554263]309
[1a396398]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
[cfc2a54]313permissions after the command is run. You can then copy
[1a396398]314<filename>/etc/skel/.bash_profile</filename> to the home directories of already
315existing users, including root, and set the owner and group appropriately.
[cfc2a54]316</para>
[b554263]317
[766bbe40]318<screen><userinput><command>cat &gt; ~/.bash_profile &lt;&lt; "EOF"</command>
319# Begin ~/.bash_profile
[b554263]320# Written for Beyond Linux From Scratch
321# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
[1a396398]322# updated by Bruce Dubbs &lt;bdubbs@linuxfromscratch.org&gt;
[b554263]323
[64d97b7c]324# Personal environment variables and startup programs.
[b554263]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
[1a396398]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
[b554263]344if [ -f "$HOME/.bashrc" ] ; then
[7008de1]345 source $HOME/.bashrc
[b554263]346fi
347
348if [ -d "$HOME/bin" ] ; then
[1a396398]349 append $HOME/bin
[b554263]350fi
351
[1a396398]352unset append
[b554263]353
[766bbe40]354# End ~/.bash_profile
355<command>EOF</command></userinput></screen>
[1a396398]356</sect2>
357
358<sect2>
359<title><filename>~/.bashrc</filename></title>
[b554263]360
[1a396398]361<para>Here is a base <filename>~/.bashrc</filename>. The comments and
[8604d92f]362instructions for using <filename class="directory">/etc/skel</filename> for
[1a396398]363<filename>.bash_profile</filename> above also apply here. Only the target file
364names are different.</para>
[b554263]365
[766bbe40]366<screen><userinput><command>cat &gt; ~/.bashrc &lt;&lt; "EOF"</command>
367# Begin ~/.bashrc
[b554263]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
[64d97b7c]374# ~/.bash_profile. System wide environment variables and startup
[b554263]375# programs are in /etc/profile. System wide aliases and functions are
376# in /etc/bashrc.
377
378if [ -f "/etc/bashrc" ] ; then
[7008de1]379 source /etc/bashrc
[b554263]380fi
381
[766bbe40]382# End ~/.bashrc
383<command>EOF</command></userinput></screen>
[1a396398]384</sect2>
385
386
387<sect2>
388<title><filename>~/.bash_logout</filename></title>
[b554263]389
[1a396398]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>
[b554263]394
[766bbe40]395<screen><userinput><command>cat &gt; ~/.bash_logout &lt;&lt; "EOF"</command>
396# Begin ~/.bash_logout
[b554263]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
[766bbe40]402# End ~/.bash_logout
403<command>EOF</command></userinput></screen>
[1a396398]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.
[cfc2a54]416</para>
417
[1a396398]418<screen><userinput><command>dircolors -p > /etc/dircolors</command></userinput></screen>
[b554263]419
[1a396398]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
[7008de1]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>
[1a396398]429</sect2>
[b554263]430</sect1>
Note: See TracBrowser for help on using the repository browser.