내가 일반적으로 사용하는 쉘은 및 zsh
와 같은 특정 프로그램에서 색상을 활성화하기 위한 몇 가지 별칭이 있습니다 . 와 같은 비표준 위치에서도 프로그램을 실행할 수 있도록 사용자 정의 경로도 설정했습니다 .ls
grep
~/bin/
나루트의 쉘을 변경하지 않습니다.하지만 zsh
루트도 이를 가질 수 있도록 이러한 설정을 공유하고 싶습니다. 나는 이것이 zsh
구매가 아니라는 것을 발견했습니다 /etc/profile
. 나는 그것을 소싱할 수 있지만 /etc/zsh/zprofile
좀 더 "올바른" 다른 방법을 원합니다.
답변1
파일을 만들고 /etc/commonprofile
and에 가져옵니다. 이를 통해 공통 설정을 공유하면서도 특정 설정과 구문을 개별적으로 사용할 수 있습니다./etc/profile
/etc/zsh/zprofile
bash
zsh
/etc/profile
zprofile
답변2
Zsh에는 POSIX sh 코드와 일부 bash 확장을 실행할 수 있는 sh 호환 모드가 있습니다. zsh에 없는 bash 기능(동일한 구문 사용)을 사용하지 않는 한 두 쉘에서 제공하는 동일한 파일을 가질 수 있습니다. 내장 기능을 사용하여 emulate
zsh를 호환 모드로 전환하세요. 이 -L
옵션을 사용하면 에뮬레이션은 폐쇄된 소스 스크립트가 아닌 폐쇄된 함수의 로컬 에뮬레이션입니다.
source_sh () {
emulate -LR sh
. "$@"
}
환경 변수와 같은 경우 구성 파일이 bash 관련 기능을 사용할 가능성이 낮으므로 source_sh /etc/profile
in /etc/zprofile
및 source_sh ~/.profile
out 을 사용할 수 있습니다 .~/.zprofile
별칭 및 함수 정의와 같은 경우 쉘 rc 파일에는 공유할 수 없는 많은 항목(프롬프트, 키 바인딩, 완성 설정 등)이 포함될 수 있으므로 ~/.sh_aliases
에서 시작되고 ~/.bashrc
' source_sh
d'인 파일을 사용하세요 ~/.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 및 더 많은 환경에 대한 공통 구성 파일을 쉽게 생성할 수 있습니다.
별칭도 같은 방식으로 정의할 수 있습니다. 그러나 별칭은 연속 쉘 간에 잘 상속되지 않으므로 해결 방법이 필요할 수 있다는 사실을 곧 알게 될 것입니다.