Soy nuevo en Ubuntu. Estoy ejecutando 13.10 Desktop.
Quería establecer algunos alias de todo el sistema y un mensaje personalizado para bash. Encontré este artículo:
https://help.ubuntu.com/community/EnvironmentVariables
Siguiendo los consejos de este artículo, creé /etc/profiles.d/profile_local.sh. Es propiedad de root y tiene permisos de 644 al igual que los otros scripts allí:
root@ubuntu:/etc/profile.d# ll
total 28
drwxr-xr-x 2 root root 4096 Mar 23 08:56 .
drwxr-xr-x 135 root root 12288 Mar 23 09:15 ..
-rw-r--r-- 1 root root 660 Oct 23 2012 bash_completion.sh
-rw-r--r-- 1 root root 3317 Mar 23 07:36 profile_local.sh
-rw-r--r-- 1 root root 1947 Nov 23 00:57 vte.sh
Además, he confirmado que / etc / profile llama a /etc/profile.d. Contiene este bloque de código:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
Al iniciar sesión, no parece que se obtenga el script personalizado, profile_local.sh que creé. Sin embargo, si después de iniciar sesión, 'source /etc.profile.d/profile_local.sh', obtengo el comportamiento esperado, mis alias personalizados y un mensaje personalizado.
¿Qué estoy haciendo mal?
Contenido del script 'profile_local.sh':
# 3/23/14 - Copied from Gentoo /etc/bash/bashrc
# Placed in /etc/profile.d as described at:
# https://help.ubuntu.com/community/EnvironmentVariables
# This file is sourced by all *interactive* bash shells on startup,
# including some apparently interactive shells such as scp and rcp
# that can't tolerate any output. So make sure this doesn't display
# anything or bad things will happen !
# Test for an interactive shell. There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
if [[ $- != *i* ]] ; then
# Shell is non-interactive. Be done now!
return
fi
# Bash won't get SIGWINCH if another process is in the foreground.
# Enable checkwinsize so that bash will check the terminal size when
# it regains control. #65623
# http://cnswww.cns.cwru.edu/~chet/bash/FAQ (E11)
shopt -s checkwinsize
# Enable history appending instead of overwriting. #139609
shopt -s histappend
# Change the window title of X terminals
case ${TERM} in
xterm*|rxvt*|Eterm|aterm|kterm|gnome*|interix)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'
;;
screen)
PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\033\\"'
;;
esac
use_color=false
# Set colorful PS1 only on colorful terminals.
# dircolors --print-database uses its own built-in database
# instead of using /etc/DIR_COLORS. Try to use the external file
# first to take advantage of user additions. Use internal bash
# globbing instead of external grep binary.
safe_term=${TERM//[^[:alnum:]]/?} # sanitize TERM
match_lhs=""
[[ -f ~/.dir_colors ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
[[ -z ${match_lhs} ]] \
&& type -P dircolors >/dev/null \
&& match_lhs=$(dircolors --print-database)
[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true
if ${use_color} ; then
# Enable colors for ls, etc. Prefer ~/.dir_colors #64489
if type -P dircolors >/dev/null ; then
if [[ -f ~/.dir_colors ]] ; then
eval $(dircolors -b ~/.dir_colors)
elif [[ -f /etc/DIR_COLORS ]] ; then
eval $(dircolors -b /etc/DIR_COLORS)
fi
fi
if [[ ${EUID} == 0 ]] ; then
PS1='\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
else
PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '
fi
alias ls='ls --color=auto'
alias grep='grep --colour=auto'
else
if [[ ${EUID} == 0 ]] ; then
# show root@ when we don't have colors
PS1='\u@\h \W \$ '
else
PS1='\u@\h \w \$ '
fi
fi
# Try to keep environment pollution down, EPA loves us.
unset use_color safe_term match_lhs
TZ="PST8PDT"
alias ll='ls -la'
alias dig='dig +search'
alias dir='ls -ba'
alias edit="ee"
alias ss="ps -aux"
alias dot='ls .[a-zA-Z0-9_]*'
alias news="xterm -g 80x45 -e trn -e -S1 -N &"
alias more="less"
alias c="clear"
alias m="more"
alias j="jobs"
# common misspellings
alias mroe=more
alias pdw=pwd
.sh
, es irrelevante y, de todos modos, los archivos profile.d
provienen, no se ejecutan, lo que es ligeramente diferente y no requiere que el archivo sea ejecutable. El problema aquí es que profile
& co no son leídos por scripts que no inician sesión.
.bashrc
y todos sus problemas desaparecerán. También hay una cuestión de precedencia, si uno de los archivos que se leen posteriormente también establece PS1, entonces el valor anterior será descartado. De todos modos, en serio, no toque los archivadores /etc
, juegue con los del directorio de inicio y .bashrc
no use el perfil.
.profile
archivos predeterminados en su hogar y la configuración allí sobrescribirá todo lo que haga /etc/profile
. Básicamente, nunca toque a /etc
menos que sepa lo que está haciendo. Para eso están los archivos específicos del usuario. Además, edite su pregunta y explique exactamente cómo se está conectando, eso lo cambia todo.
/etc/profile.d
que es una muy mala idea y afectará a todos los usuarios del sistema. Basta con incluir los comandos de profile_local.sh
en su ~/.profile
o, simplemente, la fuente de la secuencia de comandos mediante la adición de esta línea a su ~/.profile
: . /path/to/profile_local.sh
. (el .
medio source
, leerá el archivo que le dé y ejecutará los comandos que encuentre allí).