Btw, об шелле, вернее об ~/.bashrc.
Почему-то у народа он часто 1 и слонопотамского размера. Некоторые хранят несколько версий: 1й домашний, 2й рабочий, 3й для машин куда диплоится код, 4й для всяких раутеров, etc.
Естественно, когда в какой-то из них добавляется полезный алиас, в остальных n он отсутствует, потом в k из них вносится вручную попозже, в j никогда, что обнаруживается в самый подходящий момент.
Еще больше добавляет радости перенос прилизанного .bashrc из linux в bsd или обратно: моментально всплывают мелкие subtle differences и в комнате воздух минут 5 насыщается матом, а в дверях появляется любопытная голова.
Поэтому можно сделать так:
$ ls .bashrc*
.bashrc .bashrc.Linux.bash
.bashrc.FreeBSD.bash .bashrc.local.bash
и
$ cat .bash_login
source $HOME/.bashrc
где в .bashrc есть такое:
# Load other configs
for i in `uname` 'local'
do
[ -r $HOME/.bashrc.$i.bash ] && source $HOME/.bashrc.$i.bash
done
Т.е. для машины с лайнуксом, будут прочитаны .bashrc, bashrc.Linux.bash, .bashrc.local.bash.
- .bashrc содержит только самые общие алиасы и функции, настройка prompt, загрузка rvm.
- .bashrc.Linux.bash сдержит только специфические функции для лайнукса, например:
alias du.1='du -h --max-depth=1'
psg() {
ps ax -O etime,start | grep "$1" | grep -v grep
}
когда в .bashrc.FreeBSD.bash это выглядит:
alias du.1='du -h -d1'
psg() {
ps -axww -O etime,start | grep "$1" | grep -v grep
}
- .bashrc.local.bash содержит специфические алиасы и функции для конкретной машины. Таймзона, локаль, редактор, всякая бесконечная хрень типа:
cget() {
curl -fLO --connect-timeout 15 "$1"
}
chrome.extension() {
[ -z $1 ] && {
echo Usage: $FUNCNAME id 1>&2
return 64
}
local name=$1.crx
curl -RfL "https://clients2.google.com/service/update2/crx?response=redirect&x=id%3D${1}%26uc" > $name
[ $? -ne 0 ] && {
echo $FUNCNAME error: unknown id 1>&2
rm -f $name
return 1
}
}
и т.д.
Comments:
Почему-то у народа он часто 1 и слонопотамского размера. Некоторые хранят несколько версий: 1й домашний, 2й рабочий, 3й для машин куда диплоится код, 4й для всяких раутеров, etc.
Естественно, когда в какой-то из них добавляется полезный алиас, в остальных n он отсутствует, потом в k из них вносится вручную попозже, в j никогда, что обнаруживается в самый подходящий момент.
Еще больше добавляет радости перенос прилизанного .bashrc из linux в bsd или обратно: моментально всплывают мелкие subtle differences и в комнате воздух минут 5 насыщается матом, а в дверях появляется любопытная голова.
Поэтому можно сделать так:
$ ls .bashrc*
.bashrc .bashrc.Linux.bash
.bashrc.FreeBSD.bash .bashrc.local.bash
и
$ cat .bash_login
source $HOME/.bashrc
где в .bashrc есть такое:
# Load other configs
for i in `uname` 'local'
do
[ -r $HOME/.bashrc.$i.bash ] && source $HOME/.bashrc.$i.bash
done
Т.е. для машины с лайнуксом, будут прочитаны .bashrc, bashrc.Linux.bash, .bashrc.local.bash.
- .bashrc содержит только самые общие алиасы и функции, настройка prompt, загрузка rvm.
- .bashrc.Linux.bash сдержит только специфические функции для лайнукса, например:
alias du.1='du -h --max-depth=1'
psg() {
ps ax -O etime,start | grep "$1" | grep -v grep
}
когда в .bashrc.FreeBSD.bash это выглядит:
alias du.1='du -h -d1'
psg() {
ps -axww -O etime,start | grep "$1" | grep -v grep
}
- .bashrc.local.bash содержит специфические алиасы и функции для конкретной машины. Таймзона, локаль, редактор, всякая бесконечная хрень типа:
cget() {
curl -fLO --connect-timeout 15 "$1"
}
chrome.extension() {
[ -z $1 ] && {
echo Usage: $FUNCNAME id 1>&2
return 64
}
local name=$1.crx
curl -RfL "https://clients2.google.com/service/update2/crx?response=redirect&x=id%3D${1}%26uc" > $name
[ $? -ne 0 ] && {
echo $FUNCNAME error: unknown id 1>&2
rm -f $name
return 1
}
}
и т.д.
Comments:
- Oleksii Shevchuk, 2013-05-24T15:45:27.440Z
cat ~/.bashrc
load_aliases(){
if [ -d ~/.aliases.d ]; then
for f in ~/.aliases.d/*; do
source $f
done
fi
}
load_shell(){
if [ -d ~/.shell.d ]; then
for f in ~/.shell.d/*; do
source $f
done
fi
}
if [ ! -z "${TERM}" ]; then
load_shell
load_aliases
fi - Henry Flower, 2013-05-24T16:37:17.580Z
+Oleksii Shevchuk или так, только в этом примере оно прочитает файлы для чужой ОС тоже.
способов много, главное не держать 1 гигантский ~/.bashrc со всеми потрохами, ггг
Permalink: https://plus.google.com/115290581164606462017/posts/2DiKQjjVgQf