2017-10-02 1 views
0

쉘 스크립트에서 터미널의 현재 별명을 인쇄하는 방법이 있습니까? 명령 줄에 alias을 간단하게 입력하면 인쇄 할 수 있지만 스크립트를 실행할 때 인쇄해야합니다.쉘의 현재 별명을 인쇄하십시오

+1

왜 'alias'를 실행하는 스크립트가 없습니까? '#!/bin/bash'와'alias' 두 줄을 길게 만드십시오. 또는 나는 무엇인가 놓치고 있냐? – Mort

+0

터미널에 앨리어스 만 입력하면 별칭의 전체 목록이 표시되고 저장하려면 해당 파일을 리디렉션합니다. 그것을 과장하지 마십시오. – LethalProgrammer

+0

예, @ LethalProgrammer가 맞고 심지어 간단한 해결책조차 너무 깁니다. 거기에는 이미 스크립트가 있으며'alias'라고합니다. 원하는 경우 $ (별명) "'을 스크립트에 echo 할 수 있습니다. – Mort

답변

2

Bash에는 쉘 변수 BASH_ALIASES이 있습니다.이 변수는 별칭 이름과 별칭을 값으로 사용하는 연관 배열입니다. 이 같은 예를 들어, 인쇄 할 수 있습니다 다음 %q 형식 사양이 명령을 재사용 인용 있는지 확인합니다

for key in "${!BASH_ALIASES[@]}"; do 
    printf '%s=%q\n' "$key" "${BASH_ALIASES[$key]}" 
done 

.

release notes으로 언급하지 않았으므로이 기능이 도입되었을 때 확실하지 않습니다. 연관 배열에는 Bash 4.0 이상이 필요합니다.

이 변수는 환경 변수가 아닌 쉘 변수이므로 서브 쉘 (예 : 비 대화식 스크립트를 실행할 때)에서는 사용할 수 없습니다.

당신은 다음,하지만 당신의 별명 선언 예를 이것에 대한 포함 파일 ~/.aliases.sh에 있다고 가정 할 수있는 :

alias ll='ls -l' 

스크립트 다음 할 수는

source ~/.aliases.sh 

for key in "${!BASH_ALIASES[@]}"; do 
    printf '%s=%q\n' "$key" "${BASH_ALIASES[$key]}" 
done 

ll      # Won't work! "ll: command not found" 

shopt -s expand_aliases # Turn on alias expansion 

ll      # Works! 

그래서 BASH_ALIASES 것 별칭 선언을 소싱 한 후에 채워지지만 expand_aliases 쉘 옵션을 설정할 때까지 실제로 사용할 수 없습니다.

+0

인덱싱 된 배열에서 (bash <'4.0'을 사용하는 경우) 그들을 캡쳐하는 또 다른 비슷한 방법은'IFS = $ '\ n'; a = ($ (alias | sed 's/^ 별칭 [] //'))' –