source: postlfs/config/profile.xml@ e9ef7b5e

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 xry111/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since e9ef7b5e was e9ef7b5e, checked in by Bruce Dubbs <bdubbs@…>, 20 years ago

Set inital PATH in profile script

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

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