.zshrc
내 홈 디렉터리에 다음 파일이 있습니다.
# modify the prompt to contain git branch name if applicable
git_prompt_info() {
current_branch=$(git current-branch 2> /dev/null)
if [[ -n $current_branch ]]; then
echo " %{$fg_bold[green]%}$current_branch%{$reset_color%}"
fi
}
setopt promptsubst
export PS1='${SSH_CONNECTION+"%{$fg_bold[green]%}%n@%m:"}%{$fg_bold[blue]%}%c%{$reset_color%}$(git_prompt_info) %# '
# load our own completion functions
fpath=(~/.zsh/completion $fpath)
# completion
autoload -U compinit
compinit
# load custom executable functions
for function in ~/.zsh/functions/*; do
source $function
done
# makes color constants available
autoload -U colors
colors
# enable colored output from ls, etc
export CLICOLOR=1
# history settings
setopt hist_ignore_all_dups inc_append_history
HISTFILE=~/.zhistory
HISTSIZE=4096
SAVEHIST=4096
# awesome cd movements from zshkit
setopt autocd autopushd pushdminus pushdsilent pushdtohome cdablevars
DIRSTACKSIZE=5
# Enable extended globbing
setopt extendedglob
# Allow [ or ] whereever you want
unsetopt nomatch
# vi mode
bindkey -v
bindkey "^F" vi-cmd-mode
bindkey jj vi-cmd-mode
# handy keybindings
bindkey "^A" beginning-of-line
bindkey "^E" end-of-line
bindkey "^R" history-incremental-search-backward
bindkey "^P" history-search-backward
bindkey "^Y" accept-and-hold
bindkey "^N" insert-last-word
bindkey -s "^T" "^[Isudo ^[A" # "t" for "toughguy"
# aliases
[[ -f ~/.aliases ]] && source ~/.aliases
# extra files in ~/.zsh/configs/pre , ~/.zsh/configs , and ~/.zsh/configs/post
# these are loaded first, second, and third, respectively.
_load_settings() {
_dir="$1"
if [ -d "$_dir" ]; then
if [ -d "$_dir/pre" ]; then
for config in "$_dir"/pre/**/*(N-.); do
. $config
done
fi
for config in "$_dir"/**/*(N-.); do
case "$config" in
"$_dir"/pre/*)
:
;;
"$_dir"/post/*)
:
;;
*)
if [ -f $config ]; then
. $config
fi
;;
esac
done
if [ -d "$_dir/post" ]; then
for config in "$_dir"/post/**/*(N-.); do
. $config
done
fi
fi
}
_load_settings "$HOME/.zsh/configs"
# Local config
[[ -f ~/.zshrc.local ]] && source ~/.zshrc.local
안타깝게도 터미널을 실행하면 다음 오류가 발생합니다.
/home/steven/.zshrc:72: parse error near `fi'
문제는 내 별칭 파일에 있는 것 같습니다. 두 개의 별칭 파일이 있습니다: 1. .aliases
2..aliases.local
.aliases
로드할 다음 명령이 포함된 로드됨 .aliases.local
:
[[ -f ~/.aliases.local ]] && source ~/.aliases.local
내 .aliases.local
파일에는 다음 두 가지 별칭이 있습니다.
alias server='ssh -p xxx [email protected]'
alias do='ssh -L xxxx:127.0.0.1:xxxx -N -f -l user -p xxxx xx.xx.xxx.xxx'
이는 기본적으로 내 서버(첫 번째 별칭)에 SSH로 연결하고 VNC 클라이언트를 사용하여 서버에 연결할 수 있도록 보안 터널을 설정하는 별칭입니다.
두 별칭 모두 잘 작동하지만 에서 정의하면 .aliases.local
이 오류가 계속 발생합니다. 내가 뭘 잘못했나요?
답변1
do
쉘의 예약어입니다. 이는 while
and 루프 구문의 일부 입니다 for
. 별칭으로 정의하면 별칭이 예약어보다 우선합니다. 따라서 별칭 확장 후 쉘은 다음을 확인합니다.
if [ -d "$_dir/pre" ]; then
for config in "$_dir"/pre/**/*(N-.); ssh -L xxxx:127.0.0.1:xxxx -N -f -l user -p xxxx xx.xx.xxx.xxx
. $config
done
fi
fi
zsh가 세미콜론 다음에 the 대신에 done
또는 그 부족에 대해 불평하는 이유를 모르겠지만 do
그럼에도 불구하고 유효한 구문이 아닙니다.
별칭에 대해 다른 이름을 선택해야 합니다. 모두 피하다예약어.