Tôi mới dùng Ubuntu. Tôi đang chạy máy tính để bàn 13.10.
Tôi muốn đặt một số bí danh trên toàn hệ thống và một dấu nhắc tùy chỉnh cho bash. Tôi tìm thấy bài viết này:
https://help.ubfox.com/community/En MôiVariables
Theo lời khuyên trong bài viết này, tôi đã tạo /etc/profiles.d/profile_local.sh. Nó được sở hữu bởi root và có quyền 644 giống như các tập lệnh khác ở đó:
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
Tôi đã xác nhận thêm rằng / etc / hồ sơ gọi /etc/profile.d. Nó chứa khối mã này:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
Khi đăng nhập, có vẻ như tập lệnh tùy chỉnh, profile_local.sh tôi đã tạo có nguồn gốc. Tuy nhiên, nếu sau khi đăng nhập, tôi 'source /etc.profile.d/profile_local.sh', tôi nhận được hành vi mong đợi, bí danh tùy chỉnh của mình và lời nhắc tùy chỉnh.
Tôi đang làm gì sai?
Nội dung của tập lệnh '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
, nó không liên quan và dù sao các tệp trong profile.d
có nguồn gốc, không được thực thi, hơi khác nhau và không yêu cầu tệp phải được thực thi. Vấn đề ở đây là profile
& co không được đọc bởi các tập lệnh không đăng nhập.
.bashrc
và tất cả các vấn đề của bạn sẽ biến mất. Ngoài ra còn có một câu hỏi về quyền ưu tiên, nếu một trong các tệp được đọc sau đó cũng đặt PS1, thì giá trị trước đó sẽ bị loại bỏ. Dù sao, nghiêm túc, không chạm vào người quay phim /etc
, chơi với những người trong thư mục nhà của bạn và .bashrc
không sử dụng hồ sơ.
.profile
các tệp mặc định trong nhà của bạn và các cài đặt ở đó sẽ ghi đè lên mọi thứ bạn làm /etc/profile
. Về cơ bản không bao giờ chạm vào /etc
trừ khi bạn biết những gì bạn đang làm. Đó là những gì các tập tin người dùng dành cho. Ngoài ra, vui lòng chỉnh sửa câu hỏi của bạn và giải thích chính xác cách bạn đang kết nối, điều đó thay đổi mọi thứ.
/etc/profile.d
đó là một ý tưởng thực sự tồi tệ và sẽ ảnh hưởng đến tất cả người dùng hệ thống. Chỉ cần bao gồm các lệnh từ profile_local.sh
trong ~/.profile
hoặc đơn giản là nguồn kịch bản bằng cách thêm dòng này vào ~/.profile
: . /path/to/profile_local.sh
. ( .
phương tiện source
, nó sẽ đọc tệp bạn cung cấp cho nó và chạy các lệnh nó tìm thấy ở đó).