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

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

내가 일반적으로 사용하는 쉘은 및 zsh와 같은 특정 프로그램에서 색상을 활성화하기 위한 몇 가지 별칭이 있습니다 . 와 같은 비표준 위치에서도 프로그램을 실행할 수 있도록 사용자 정의 경로도 설정했습니다 .lsgrep~/bin/

루트의 쉘을 변경하지 않습니다.하지만 zsh루트도 이를 가질 수 있도록 이러한 설정을 공유하고 싶습니다. 나는 이것이 zsh구매가 아니라는 것을 발견했습니다 /etc/profile. 나는 그것을 소싱할 수 있지만 /etc/zsh/zprofile좀 더 "올바른" 다른 방법을 원합니다.

답변1

파일을 만들고 /etc/commonprofileand에 가져옵니다. 이를 통해 공통 설정을 공유하면서도 특정 설정과 구문을 개별적으로 사용할 수 있습니다./etc/profile/etc/zsh/zprofilebashzsh/etc/profilezprofile

답변2

Zsh에는 POSIX sh 코드와 일부 bash 확장을 실행할 수 있는 sh 호환 모드가 있습니다. zsh에 없는 bash 기능(동일한 구문 사용)을 사용하지 않는 한 두 쉘에서 제공하는 동일한 파일을 가질 수 있습니다. 내장 기능을 사용하여 emulatezsh를 호환 모드로 전환하세요. 이 -L옵션을 사용하면 에뮬레이션은 폐쇄된 소스 스크립트가 아닌 폐쇄된 함수의 로컬 에뮬레이션입니다.

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

환경 변수와 같은 경우 구성 파일이 bash 관련 기능을 사용할 가능성이 낮으므로 source_sh /etc/profilein /etc/zprofilesource_sh ~/.profileout 을 사용할 수 있습니다 .~/.zprofile

별칭 및 함수 정의와 같은 경우 쉘 rc 파일에는 공유할 수 없는 많은 항목(프롬프트, 키 바인딩, 완성 설정 등)이 포함될 수 있으므로 ~/.sh_aliases에서 시작되고 ~/.bashrc' source_shd'인 파일을 사용하세요 ~/.zshrc.

답변3

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

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

답변4

변수에 관해서는 모듈과 모듈 파일[1]이 누락된 것 같습니다. 이 작업을 시작하면 단일 모듈 파일의 편리함을 통해 다양한 셸(bash 및 zsh 포함), Python, Perl 및 더 많은 환경에 대한 공통 구성 파일을 쉽게 생성할 수 있습니다.

별칭도 같은 방식으로 정의할 수 있습니다. 그러나 별칭은 연속 쉘 간에 잘 상속되지 않으므로 해결 방법이 필요할 수 있다는 사실을 곧 알게 될 것입니다.

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

관련 정보