Mailinglist Archive: opensuse (882 mails)

< Previous Next >
[opensuse] .bashrc tip for managing multiple boxes, multiple user configs
  • From: "David C. Rankin" <drankinatty@xxxxxxxxxxxxxxxxxx>
  • Date: Thu, 30 Dec 2010 11:21:58 -0600
  • Message-id: <4D1CBFB6.1000202@xxxxxxxxxxxxxxxxxx>
Guys,

This is nothing special, but it was a clever approach to managing your
.bashrc
over multiple boxes with different user configs for root, you, and other users.
The basic approach is just to make use of includes with a couple of conditional
checks on $UID or $USER to set the environment accordingly. Here is what I did
(no doubt there are much better ways):

The .bashrc skeleton:

test -s ~/.alias && . ~/.alias || true

## functions & general aliases
. /home/admin/cnf/bashrc-gen.inc

## exports
. /home/admin/cnf/bashrc-exp.inc

## aliases for builtins
. /home/admin/cnf/bashrc-bins.inc

## general aliases
. /home/admin/cnf/bashrc-gen.inc

## Application Aliases
. /home/admin/cnf/bashrc-apps.inc

## Directory Aliases
. /home/admin/cnf/bashrc-dirs.inc

## zypper Aliases
. /home/admin/cnf/bashrc-zyp.inc
<snip>

The directory holding the include files:

11:06 phoenix:~> l1 /home/admin/cnf
bashrc-apps.inc
bashrc-bins.inc
bashrc-dirs.inc
bashrc-exp.inc
bashrc-gen.inc
bashrc-zyp.inc
bashrc-ssh.inc

Then the contents of the various files (just 2 examples):

11:08 phoenix:~> cat /home/admin/cnf/bashrc-exp.inc
## exports
[[ $UID -eq 0 ]] && {
# root prompt
export PS1="\[\e[1;34m\][\[\e[1;31m\]\A
\[\e[1;34m\]\h\[\e[0;31m\]:\w\[\e[1;34m\]] # \[\e[0m\]"
} || {
# user prompt
export PS1="\[\e[0;37m\]\A\[\e[1;34m\] \[\e[1;34m\]\h:\w> \[\e[0m\]"
}
export PATH=$PATH:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin
export HISTFILESIZE=15000
export HISTSIZE=15000

11:09 phoenix:~> cat /home/admin/cnf/bashrc-gen.inc
## general alias functions

wgnc()
{
if [[ -z $1 ]]; then
echo -e "\n Usage: wg <filename>\t\t(runs wget --no-check-certificate
--progress=bar)\n"
else
wget --no-check-certificate --progress=bar $1
fi
}

showhist() {
[[ -z $1 ]] && { echo -e "\nUsage: hist <search term>\n"; return 1; }
history | grep $1
return 0
}

mkdircd() {
[[ -z $1 ]] && { echo -e "\nUsage: mdcd <newdir>\n"; return 1; }
mkdir -p $1 && cd $1 || { echo -e "\n Failed to make or change to directory:
$1\n"; return 1; }
return 0
}

perledinln() {
if [[ ! -f $2 ]]; then
echo -e "\n Usage ${0##*/} REGEX filename\n\n Will edit the file
in-place based on REGEX using perl\n"
else
REGEX=$1
INFILE=$2
perl -p -i -e $REGEX $INFILE
fi
}

## user specific aliases
[[ $UID -eq 0 ]] && {
alias tmsg='tail -n150 /var/log/messages'
alias tmsgf='tailf /var/log/messages'
#<snip>
}

[[ $USER == david ]] && {
alias tmsg='sudo tail -n150 /var/log/messages'
alias tmsgf='sudo tailf /var/log/messages'
#<snip>
}

## general aliases
alias difscl='diff -y --suppress-common-lines'
alias hist='showhist'
alias mdcd='mkdircd'
alias ppie='perledinln'
alias wg='wgnc' #requires 1 input

Basically, the setup allows the use of 1 .bashrc file among all boxes
and users
and all you have to remember to do is rsync the /home/admin/cnf dir between
boxes (or where ever you would put that kind of stuff on your box) Then when
changes are needed, you simply edit a singe ../cnf/bashrc-xxx.inc file and rsync
the change to hosts and not have to edit 50 individual bashrc files.

I'm open if there are other ways or setup tweaks that would make this
easier.
Also, let me know if you see any red flags. (I'm not concerned about users being
able to 'see' what the root bashrc includes - the users I have couldn't even
read the thing) Enjoy.

--
David C. Rankin, J.D.,P.E.
Rankin Law Firm, PLLC
510 Ochiltree Street
Nacogdoches, Texas 75961
Telephone: (936) 715-9333
Facsimile: (936) 715-9339
www.rankinlawfirm.com
--
To unsubscribe, e-mail: opensuse+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse+help@xxxxxxxxxxxx

< Previous Next >
Follow Ups