Bash 스크립트에 Alias를 도입하는 방법

3117 단어 Bash스크립트alias

alias의 사용


일상적인 개발에서 운영 효율을 높이기 위해 우리는 알리스(명령 별명)로 명령의 약칭을 정의할 것이다.예를 들어 ~/.bash_profile 에 추가:

alias ll='ls -lrt --color'
alias bdebug="go build -gcflags '-N -l'"
alias py3='/usr/bin/python3'
source ~/.bash_profile을 실행하면 이 알리스 정의가 현재 터미널 환경에 불러옵니다. alias <cmd> 을 통해 볼 수 있습니다.

$ alias ll 
ll='ls -lrt --color'

$ alias bdebug
bdebug='go build -gcflags '\''-N -l'\'
명령줄에서alias를 실행해도 예상 효과를 볼 수 있습니다

$ ll 
total 44
-rw-rw-r-- 1 liyang liyang  62 Sep 16 09:38 test.c
-rw-rw-r-- 1 liyang liyang  68 Sep 16 09:38 foo.h
-rw-rw-r-- 1 liyang liyang  74 Sep 16 09:38 foo.c
-rwxrwxr-x 1 liyang liyang 8592 Sep 16 09:44 libfoo.so
-rw-rw-r-- 1 liyang liyang 4347 Sep 16 09:44 o23.s
-rwxrwxr-x 1 liyang liyang 9451 Sep 16 09:45 test

Bash 스크립트에 Alias를 도입하는 문제


그러나 때때로 우리는 명령을 간소화하기 위해 ~/.bash_profile 에서 정의된alias를 Bash 스크립트에 도입하기를 희망한다.예:
스크립트 파일 테스트.sh

#!/bin/bash
source ~/.bash_profile
ll
테스트를 수행합니다.sh 파일이 잘못 보고됩니다.

$ bash test.sh 
test.sh: line 5: ll: command not found
이것은 Bash에서alias가 기본적으로 Bash 스크립트에 도입할 수 없기 때문입니다.Bash의 공식 문서는 사실 function 대신 alias 를 사용하는 것을 권장합니다.그럼 문제가 생겼어요. 제가 이렇게 많은alias를 고생스럽게 썼으니 모두function으로 바꿀 수는 없겠죠. 얼마나 힘들겠어요?
다행히 해결 방법은 아직 있다.

해결 방법


테스트만 하면 돼요.sh에 한 줄 추가shopt -s expand_aliases새 스크립트 파일

#!/bin/bash

shopt -s expand_aliases
source ~/.bash_profile
ll
실행해 봐, 과연 성공했어, 이게 왜?

$ bash test.sh 
total 48
-rw-rw-r-- 1 liyang liyang  62 Sep 16 09:38 test.c
-rw-rw-r-- 1 liyang liyang  68 Sep 16 09:38 foo.h
-rw-rw-r-- 1 liyang liyang  74 Sep 16 09:38 foo.c
-rwxrwxr-x 1 liyang liyang 8592 Sep 16 09:44 libfoo.so
-rw-rw-r-- 1 liyang liyang 4347 Sep 16 09:44 o23.s
-rwxrwxr-x 1 liyang liyang 9451 Sep 16 09:45 test
-rw-rw-r-- 1 liyang liyang  64 Mar 8 21:33 test.sh
관건은 shopt -s expand_aliases라는 말에 있다. shopt 명령이다. 이 명령을 사용하면 셸과 관련된 스위치를 제어할 수 있다. expand_aliases 그 중 하나이다. 이 명령이 켜지면 Bash 스크립트의 모든 명령 별명 alias 이 전개된다.
expand_aliases
If set, aliases are expanded as described below under Aliases, Aliases. This option is enabled by default for interactive shells.

총결산

  • alias 명령은 명령 별명을 사용자 정의하고 운영을 간소화하는 데 도움을 준다
  • 기본적으로 터미널 환경의alias를 Bash 스크립트에 도입할 수 없음
  • shopt -s expand_aliases를 통해 상술한 문제를 해결할 수 있다.
  • 참고
    https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
    Bash 스크립트에서 Alias를 도입하는 방법에 대한 이 글은 여기까지 소개되었습니다. 더 많은 Bash 스크립트에서 Alias를 도입하는 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기