Выбрать главу

ulimit -S -c 0 > /dev/null 2>&1

if [ -x /usr/bin/id ]; then

 USER="\Qid -un\Q"

 LOGNAME=$USER

 MAIL="/var/spool/mail/$USER"

fi

HOSTNAME=\Q/bin/hostname\Q

HISTSIZE=1000

if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then

 INPUTRC=/etc/inputrc

fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

for i in /etc/profile.d/*.sh ; do

 if [ -r "$i" ]; then

  . $i

 fi

done

unset i

unset pathmunge

This script adds /sbin , /usr/sbin , and /usr/local/sbin to the PATH if the user is the root user. It then creates and exports the USER , LOGNAME , MAIL , HOSTNAME , and HISTSIZE variables, and executes any files in /etc/profile.d that end in .sh .

The default ~/.bash_profile looks like this:

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

 . ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

You can edit /etc/profile to change the login process for all users, or ~/.bash_profile to change just your login process. One useful change that I make to every Fedora system I install is to comment out the if statements for path manipulation in /etc/profile so that every user has the superuser binary directories in his path:

# Path manipulation

# if [ "$EUID" = "0" ]; then

pathmunge /sbin

pathmunge /usr/sbin

pathmunge /usr/local/sbin

# fi  

bash comments start with # and are not executed so commenting out code means adding # at the start of selected lines to disable them

Environment variables are inherited by child processes, so any environment variables set up during the login process are accessible to all shells (and other programs) you start. bash also supports the use of aliases , or nicknames, for commands, but since these are not inherited by child processes, they are instead placed in the file ~/.bashrc , which is executed each time a shell starts. If you log in once and then start three shells, ~/.bash_profile is executed once at login and ~/.bashrc is executed three times, once for each shell that starts.

This is the default ~/.bashrc :

# .bashrc

# Source global definitions

if [ -f /etc/bashrc ]; then

 . /etc/bashrc

fi

# User-specific aliases and functions

As you can see, there aren't any alias definitions in there (but you can add them). The file /etc/bashrc is invoked by this script, and it contains common aliases made available to all users:

# System-wide functions and aliases

# Environment stuff goes in /etc/profile

# By default, we want this to get set.

# Even for noninteractive, nonlogin shells.

umask 022

# Are we an interactive shell?

if [ "$PS1" ]; then

 case $TERM in

 xterm*)

  if [ -e /etc/sysconfig/bash-prompt-xterm ]; then

   PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm

  else

   PROMPT_COMMAND='echo -ne ↵

   "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}";

   echo -ne "\007"'

  fi

 ;;

 screen)

  if [ -e /etc/sysconfig/bash-prompt-screen ]; then

   PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen

  else

   PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\033\\"'

  fi

 ;;

 *)

  [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default

 ;;

 esac

# Turn on checkwinsize

 shopt -s checkwinsize

 [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "

fi

if ! shopt -q login_shell ; then # We're not a login shell

 # Need to redefine pathmunge, it get's undefined at the end of /etc/profile

 pathmunge ( ) {

  if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then

   if [ "$2" = "after" ] ; then

    PATH=$PATH:$1

   else

    PATH=$1:$PATH

   fi

  fi

 }

 for i in /etc/profile.d/*.sh; do

  if [ -r "$i" ]; then

   . $i

  fi

 done

 unset i

 unset pathmunge

fi

# vim:ts=4:sw=4

This script sets up the umask , configures a command that will be executed before the display of each prompt (which sets the terminal-window title to show the user, host, and current directory), and then executes each of the files in /etc/profile.d that end in .sh .

Packages installed on your Fedora system can include files that are placed in /etc/profile.d , providing a simple way for each package to globally add aliases or other shell configuration options. There are a few command aliases defined in these script files, including:

alias l.='ls -d .* --color=tty'

alias ll='ls -l --color=tty'

alias ls='ls --color=tty'

alias vi='vim'

If you type ll at a command prompt, ls -l will be executed, due to the alias highlighted in the preceding listing:

$ ll /