Ich bin neu in Ubuntu. Ich verwende 13.10 Desktop.
Ich wollte einige systemweite Aliase und eine benutzerdefinierte Eingabeaufforderung für Bash festlegen. Ich habe diesen Artikel gefunden:
https://help.ubuntu.com/community/EnvironmentVariables
Den Ratschlägen in diesem Artikel folgend, habe ich /etc/profiles.d/profile_local.sh erstellt. Es gehört root und hat die Berechtigungen 644, genau wie die anderen Skripte dort:
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
Ich habe weiterhin bestätigt, dass / etc / profile /etc/profile.d aufruft. Es enthält diesen Codeblock:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
Bei der Anmeldung scheint es nicht so zu sein, dass das benutzerdefinierte Skript profile_local.sh, das ich erstellt habe, bezogen wird. Wenn ich mich jedoch nach dem Anmelden als "source /etc.profile.d/profile_local.sh" anmelde, erhalte ich das erwartete Verhalten, meine benutzerdefinierten Aliase und die benutzerdefinierte Eingabeaufforderung.
Was mache ich falsch?
Inhalt des Skripts '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 ist irrelevant, und die Dateien, aus profile.d
denen sie stammen, werden nicht ausgeführt, was sich geringfügig unterscheidet und keine ausführbare Datei erfordert. Das Problem hierbei ist, dass profile
& co nicht von Nicht-Login-Skripten gelesen werden.
.bashrc
Sie einfach und alle Ihre Probleme werden verschwinden. Es ist auch eine Frage der Rangfolge, wenn eine der Dateien, die anschließend gelesen werden, auch PS1 setzt, wird der vorherige Wert verworfen. Wie auch immer, im Ernst, berühren Sie nicht die Ordner /etc
, spielen Sie mit denen in Ihrem Heimverzeichnis und verwenden Sie .bashrc
kein Profil.
.profile
in Ihrem Heim und die Einstellungen dort überschreiben alles, was Sie tun /etc/profile
. Grundsätzlich niemals anfassen, es /etc
sei denn, Sie wissen, was Sie tun. Dafür sind die benutzerspezifischen Dateien gedacht. Bitte bearbeite auch deine Frage und erkläre genau, wie du dich verbindest, das ändert alles.
/etc/profile.d
einer wirklich schlechten Idee, die alle Benutzer des Systems betrifft. Gerade ist die Befehle profile_local.sh
in Ihrem ~/.profile
oder einfach das Skript beziehen , indem Sie diese Zeile in dem Hinzufügen ~/.profile
: . /path/to/profile_local.sh
. (Das .
bedeutet source
, es liest die Datei, die Sie ihm geben, und führt die Befehle aus, die es dort findet).