비대화형 쉘에서는 별칭을 확장할 수 없습니다.

비대화형 쉘에서는 별칭을 확장할 수 없습니다.

이 글을 읽은 후 비대화형 쉘에서 몇 가지 별칭을 사용하고 싶습니다.이 게시물그리고이 게시물. 이것은 내 명령입니다:

bash -O expand_aliases -c 'source ~/.bashrc; <some alias>'

이 내 꺼야 .bashrc:

 # Bash History
 HISTSIZE=1000
 HISTFILESIZE=2000
 # Colorful Prompt
 PS1='\[\033[01;34m\]\w\n\[\033[01;32m\]\u@\h\[\033[00m\] > '
 # Aliases
 alias ls='ls --color=auto -A -I NTUSER.\* -I ntuser.\*'
 alias echo='echo -e'
 alias docker='"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'
 alias docker-compose='"/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose.exe"'

echo뭔가를 입력했는데 작동 한다고 .bashrc확신하는데 source ~/.bashrc별칭이 확장을 거부합니다. 나는 또한 다음을 시도했습니다.

bash -O expand_aliases -c shopt

옵션이 expand_aliases켜져 있는지 확인하세요.

어떻게 해결할 수 있나요?

답변1

매우 간단한 해결책은 별칭 대신 함수를 사용하는 것입니다. 함수가 별칭보다 나은 상황은 많이 있지만, 내가 아는 한 그 반대가 어떤 상황인지 아는 사람은 없습니다.

 docker () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe" "$@"; }
 docker-compose () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose.exe" "$@"; }

(나는 귀하 lsecho별칭을 이전하는 것을 거부합니다. 그들은 유익보다 해를 끼치는 것 같습니다.)

답변2

.bashrc대화형 쉘에 대해서만 실행됩니다.

이것이 제가하는 것입니다. .bash_env홈 디렉터리에 새 파일을 만듭니다. 모든 별칭을 여기에 넣으세요. 예를 들면 다음과 같습니다.

shopt -s expand_aliases
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'

그런 다음 이를 참조하십시오 .bash_profile(물론 실제 경로 이름을 거기에 넣습니다).

 export BASH_ENV='/home/username/.bash_env'

(로그아웃 후 로그인하여 활성화하세요)


BASH_ENV맨페이지에서:

bash가 쉘 스크립트를 실행할 때 이 매개변수가 설정되면 해당 값은 ~/.bashrc에서와 같이 쉘을 초기화한 명령이 포함된 파일의 이름으로 해석됩니다.

그리고:

예를 들어 bash가 비대화형으로 시작되면 쉘 스크립트를 실행하기 위해 환경에서 BASH_ENV 변수를 찾고 해당 값이 있으면 확장한 다음 확장된 값을 파일 이름으로 사용하여 읽고 실행합니다.

관련 정보