zsh와 bash간에 별명 및 PATH 설정 공유


24

내가 일반적으로 사용하는 쉘은 zsh입니다. ls및과 같은 일부 프로그램에서 색상을 활성화하는 별칭이 여러 개 grep있습니다. 또한 표준이 아닌 장소 (예 :에서 ~/bin/) 에서 프로그램을 실행할 수 있도록 사용자 지정 경로를 설정했습니다 .

나는 루트의 쉘 변경되지 않습니다 에를 zsh,하지만 난 그 루트뿐만 아니라 그것을 가질 수 있도록 이러한 설정을 공유하고 싶습니다. 나는 zsh그것이 소싱이 아니라는 것을 안다 /etc/profile. 에서 소스를 제공 할 수 /etc/zsh/zprofile있지만 다른 "적절한"방법을 원합니다.

답변:


16

나는 파일을 만들 것 /etc/commonprofile모두에 소스 /etc/profile/etc/zsh/zprofile. 이를 통해 공통 설정을 공유하고 bash각각 zsh특정 설정과 구문을 계속 사용할 수 /etc/profile있습니다 zprofile.


다른 좋은 답변 중에서 나는 이것이 가장 단순하고 "깨끗한"나에게 적합하다고 생각한다
phunehehe

"source it"은 무슨 뜻인가요?
Hlung

@Hlung 쉘 프로파일 확장 성을로드하기 위해 여기에 'source /path/to/.shell_profile'이옵니다. 'source'의 매뉴얼 페이지를 참조하십시오.
Itachi 2016 년

17

Zsh에는 sh 호환성 모드가있어 POSIX sh 코드 및 일부 bash 확장을 실행할 수 있습니다. zsh에없는 bash 기능을 사용하지 않는 한 (동일한 구문으로) 두 쉘에서 동일한 파일을 제공 할 수 있습니다. emulate내장 기능을 사용하여 zsh를 호환 모드로 설정하십시오. 과 -L옵션, 에뮬레이션은 포함하는 기능 (하지 둘러싸는 소스 스크립트)에 지역이다.

source_sh () {
  emulate -LR sh
  . "$@"
}

환경 변수와 같은 경우 프로파일 파일이 bash 특정 기능을 사용하지 않기 때문에 source_sh /etc/profilein /etc/zprofilesource_sh ~/.profilein ~/.zprofile을 사용할 수 있습니다.

별명 및 함수 정의와 같은 경우, rc rc 파일은 공유 할 수없는 많은 것 (프롬프트, 키 바인딩, 완료 설정 등)을 포함 할 가능성이 높기 때문에 ~/.sh_aliases소스 ~/.bashrcsource_sh'd 에서 ~/.zshrc.


2
"길레스의 모든 답변을 자동으로 공표"하는 방법이 있어야합니다. 시간이 많이 절약됩니다. 사실, 당신의 대답은 흔들립니다. 항상 정확하고 잘 작성되고 포괄적입니다.
fschmitt

@ fschmitt : 동의합니다. 그리고 편집되지 않은 것을 볼 수 있습니다! 여기에 제공된 힌트는 정말 좋습니다.
누군가 아직도 당신을 사용합니다 MS-DOS

4

간단한 심볼릭 링크는 어떻습니까?

ln -s /etc/profile /etc/zsh/zprofile

조건부 초기화가 필요한 경우 다음과 같이 추가 할 수도 있습니다.

#Determine our shell without using $SHELL, which may lie
shell="sh"
if test -f /proc/mounts; then
   case $(/bin/ls -l /proc/$$/exe) in
        *bash) shell=bash ;;
        *dash) shell=dash ;;
        *ash)  shell=ash ;;
        *ksh)  shell=ksh ;;
        *zsh)  shell=zsh ;;
    esac
fi

흠 그러나 나는 이것을 소싱하는 것보다 더 깨끗하다고 ​​생각하지 않습니다. zsh와 bash가 모두 읽을 파일이 있습니까?
phunehehe

소싱 또는 심볼릭 링크 생성이 "깨끗한"솔루션이 아니라고 생각하는 이유는 무엇입니까?
echox

필자는 필요한 경우 symlink를 관리하는 대신 파일을 소스로 만들고 싶습니다. 파일간에 많은 의존성을 만들고 싶지 않습니다.
phunehehe

1
보다 이식 가능한 대안은 /bin/ls -l /proc/$$/exe입니다 ps -o comm= -p $$. 일부 쉘은 호출 방식에 따라 다르게 동작하기 때문에 완전히 신뢰할 수는 없습니다. 간단하게 테스트 연습 $0.profile더 나은 표시 될 가능성이 높습니다. 그러나 유용한 기능 (bash는, KSH, zsh을)를 제공하는 대부분의 쉘은 단순히 인식 (그리고 큰 플러스입니다 확인 자신의 버전) 할 수있는 몇 가지 변수를 테스트하여 : $BASH, $BASH_VERSION, $BASH_VERSINFO, $KSH_VERSION, ${.sh.version}; $ZSH_VERSION.
Gilles 'SO- 악마 그만해'11

echox, 귀하의 사례 설명이 zsh4를 올바르게 감지하지 못함 # $ SHELL을 사용하지 않고 쉘을 결정하십시오. test -f / proc / mounts 인 경우 shell = "sh"일 수 있습니다. bash의 경우 $ (/ bin / ls -l / proc / $$ / exe) case shell = bash ;; * dash) shell = 대시 ;; * ash) shell = ash ;; * ksh) 쉘 = ksh ;; * zsh ) 쉘 = zsh ;; #shsh esac fi와 일치
Bryan Hunt

0

변수와 관련하여 모듈 및 모듈 파일이 누락되었다는 인상을 받았습니다 [1]. 일단 시작하면 단일 모듈 파일의 편리함에서 다양한 셸 (bash & zsh 포함), python, perl 및 더 많은 환경에 대한 공통 프로파일을 쉽게 작성할 수 있습니다.

같은 방식으로 별칭을 정의 할 수도 있습니다. 그러나 연속 쉘에서 별칭이 잘 상속되지 않으며 해결 방법이 필요할 수 있습니다.

[1] http://en.wikipedia.org/wiki/Environment_Modules_ (소프트웨어)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.