it-swarm-ko.tech

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

제가 일반적으로 사용하는 쉘은 zsh입니다. lsgrep와 같은 일부 프로그램에서 색상을 활성화하는 여러 별칭이 있습니다. 또한 비표준 위치 (예 : ~/bin/)에서 프로그램을 실행할 수 있도록 사용자 지정 경로를 설정했습니다.

나는 root 's Shellzsh로 바꾸지 않을 것입니다. 그러나이 설정을 공유하여 루트도 가질 수 있도록하고 싶습니다. zsh이 (가) /etc/profile을 (를) 소싱하지 않음을 확인했습니다. /etc/zsh/zprofile에서 소스를 얻을 수 있지만 다른 "적절한"방법을 원합니다.

24
phunehehe

/etc/commonprofile 파일을 만들고 /etc/profile/etc/zsh/zprofile 모두에서 소싱합니다. 이렇게하면 공통 설정을 공유하고 각각 bashzsh 특정 설정 및 구문을 /etc/profile에서 각각 zprofile 사용할 수 있습니다.

17
fschmitt

Zsh에는 POSIX sh 코드와 일부 bash 확장을 실행할 수있는 sh 호환 모드가 있습니다. zsh에없는 (동일한 구문으로) bash 기능을 사용하지 않는 한, 두 쉘에서 동일한 파일을 사용할 수 있습니다. emulate 내장 기능을 사용하여 zsh를 호환 모드로 전환하십시오. -L 옵션을 사용하면 에뮬레이션이 포함 함수에 로컬입니다 (포함 소스 스크립트가 아님).

source_sh () {
  emulate -LR sh
  . "[email protected]"
}

환경 변수와 같은 경우 source_sh /etc/profile에서 /etc/zprofile를 사용하고 source_sh ~/.profile에서 ~/.zprofile를 사용할 수 있습니다. 프로필 파일은 bash 전용을 사용하지 않을 것입니다. 풍모.

별칭 및 함수 정의와 같은 항목의 경우 Shell rc 파일에 공유 할 수없는 많은 항목 (프롬 트, 키 바인딩, 완료 설정 등)이 포함될 가능성이 있으므로 ~/.sh_aliases와 같은 파일을 사용하십시오. 출처는 ~/.bashrc이고 source_sh~/.zshrc입니다.

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

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
echox

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

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

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

0
fgeorgatos