별칭이 정의 된 위치를 확인할 수 있습니까?


24

명령으로 ll정의 된 것과 같은 별명 alias.

type ll어떤 인쇄물 과 같은 명령을 확인할 수 있습니다

ll is aliased to `ls -l --color=auto'

또는 command -v ll어떤 인쇄

alias ll='ls -l --color=auto'

또는 alias ll또한 인쇄

alias ll='ls -l --color=auto'

하지만 난 찾을 수 없습니다 경우 별칭이 같은, 즉 파일을 정의 된 .bashrc실행중인 쉘에서 아마도 수동으로, 또는. 이 시점에서 이것이 가능한지 확신 할 수 없습니다.

로드 된 모든 파일을 간단히 살펴보고 모든 파일을 bash확인해야합니까?


내가 말하고 싶은 팔목에서bash -xl
Jeff Schaller

답변:


21

쉘이 무엇을하고 있는지 보여달라고 요청한 다음 greprc 파일에서 설정을 찾는 데 도움 이되지만 수동 정의는 찾기 어려울 것입니다 (이력 로그 등) .

bash -ixlc : 2>&1 | grep ...
zsh -ixc : 2>&1 | grep ...

쉘이 위의 호출 중 하나를 사용하여 필요한 옵션을 정확하게 캡처하지 못하면 (대화식으로 null 명령을 실행) 다음과 script같습니다.

script somethingtogrep thatstrangeshell -x
...
grep ... somethingtogrep

또 다른 옵션은 쉘이 닿는 모든 파일 을 찾 strace거나 sysdig찾은 다음 수동으로 이동 하는 것입니다 (쉘 또는 프로그램에 플래그 가없는 경우 편리함). 표준 RC 파일은 oh-my-zsh 또는 사이트 별 구성과 같은 코드가 어디에서 코드를 가져 오는지 수동으로 파일 이름을 확인하기에 충분하지 않습니다. .grep-x


감사! 출력을 구문 분석하기가 조금 어려웠지만 찾고 있던 별칭을 정의한 파일을 찾았습니다. 별칭이 해당 목록의 어느 곳에도 없을 경우 별칭이 수동으로 정의되었다고 가정해도 안전합니까?
polemon

@polemon은 다소 안전합니다. who-knows-what-eason-or-was-deletes (특히 사용자가하지 않는 복잡성을 추가하는 일종의 쉘 프레임 워크가있는 경우) 때문에 읽지 않는 파일에 정의되어있을 수 있습니다. 알다).
thrig

1
별칭을 찾기 쉽게 정의하기 위해 트레이스의 모든 줄 앞에 PS4를 사용할 수 있습니다.PS4='+The ll alias is "${BASH_ALIASES["ll"]}" ' bash -ixlc :
Mark Plotnick

5

여기에 내가 grep -rl매우 유용한 곳이 있습니다 :

grep -rl alias ~/.bash* ~/.profile /etc/profile /etc/bash.bashrc

단어 alias가 사용 된 파일을 알려줍니다 .

아마도 존재 ~/.bashrc하고 가장 확실하게 ~/.bash_aliases존재합니다.


그러나 모든 옵션을 다룰 수 있다고 확신하는 것은 불가능합니다. 이러한 파일은 다른 파일을 호출하거나로드 할 수도 있습니다. ENV와 같은 환경 변수이거나 $BASH_ENVbash가 다른 파일을로드하도록 지시 할 수 있습니다.

환경에서 변수 BASH_ENV를 찾고, 값이 있으면 확장하고, 확장 된 값을 읽고 실행할 파일 이름으로 사용합니다.

변수를 설정하여 별칭을 정의 할 수도 있습니다 (강조 광산).

BASH_ALIASES
멤버가 별칭 내장에 의해 유지 관리되는 내부 별칭 목록에 해당하는 연관 배열 변수. 이 배열에 추가 된 요소는 별칭 목록에 나타납니다.


grep -rl alias ~/.bash*히스토리 파일과 잘못 일치 할 수 있지만 BASH_ALIASES 배열을 지적하면 +1입니다!
Jeff Schaller

2

실제로 별칭 소스를 나열하는 방법을 모르지만 bash를 사용하는 것처럼 보이기 때문에 가능한 소스 파일이라고 생각합니다.

/etc/profile
~/.profile
/etc/bash.bashrc
~/.bash_profile
~/.bashrc

별명을 찾기 위해이를 통해 grep 할 수 있어야합니다 (예 :) grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc.


또는 거기에 포함 된 파일 ...
Jeff Schaller

@JeffSchaller-그렇습니다 bash -x. 앞에서 언급했듯이 더 복잡한 것이 필요합니다 . 위의 내용이 빠르게 실행하기에 충분히 쉬우 며 별칭을 찾지 못하면 실행 단계를 읽을 수 있습니다.
edaemon

1

thrig의 답변@ MarkPlotnick 's suggestion 과 결합 BASH_ALIASES[ll]하여 좁히도록 설정되어 있는지 테스트 할 수 있습니다 . BASH_SOURCE배열 LINENO변수는 여기에 특히 유용하다. 불행히도, BASH_ALIASES[ll]설정 여부 는 별칭이 설정된 후에 만 성공 하므로 첫 번째 줄은 다른 파일에있을 수 있습니다.

PS4='${BASH_ALIASES["ll"]+"The ll alias has been defined before"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |&
  grep 'll alias' -m1 -B1

다음과 같은 출력 제공 :

   /home/muru/.bash_aliases:1 alias 'll=ls -AlhF'
TThe ll alias has been defined before /home/muru/.bashrc:116 alias 'ping=ping -c5'

이 검사를 사용하여 쉘을 종료 할 수도 있습니다.

$ PS4='${BASH_ALIASES["ll"]+"$(kill -9 $$)"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |& tail -n1
   /home/muru/.bash_aliases:1 alias 'll=ls -AlhF'

0

나는 단순히을 사용하여 성공했습니다 which.

[crclayton@pc scripts]$ which foo
foo:     aliased to python $HOME/projects/python/foo.py

1
whichtcsh (및 이전 csh) 및 zsh (내장)에서 별칭을 처리 할 수 ​​있으며 bash에서 (외부) GNU 프로그램을 실행하지만 셸 별칭 데이터를 공급하는 kludge가있는 RedHat-family의 기본 프로파일을 사용하여 bash에서 별칭을 처리 할 수 ​​있습니다. . 더 중요한 것은 별명이 어디에 설정되어 있는지 , 여기에 Q가 아닌 별명이 무엇인지 알려줍니다 .
dave_thompson_085


-1

마지막으로 ll웹 서버 (CentOS) 의 별칭 정의를 두 개의 쉘 스크립트에서 찾았 습니다 /etc/profile.d/.

  • /etc/profile.d/colorls.csh
  • /etc/profile.d/colorls.sh

먼저 시스템 전체 프로필이있는 위의 의견을 통해이를 발견했습니다 /etc/profile. 이 파일에는 시스템 전체 별칭이에 정의되어 /etc/bashrc있으며 해당 파일에서에 여러 셸 스크립트를 반복한다는 것을 알았 /etc/profile.d/으므로 grep해당 디렉토리에서 사용 하여 마침내 정의를 찾았습니다. 또한 l.모든 도트 파일을 나열 하는 별칭이 있음을 발견했습니다 .

보낸 사람 colorls.sh:

alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null

(에는 동일한 별칭이 colorls.csh있습니다.)


-1

먼저 다음 명령을 사용하십시오

모든 기능 나열

functions 

모든 별명 나열

alias 

별명이나 기능을 찾지 못하면 더 적극적인 검색 방법을 고려하십시오

배쉬 버전

bash -ixlc : 2>&1 | grep thingToSearchHere

Zsh 버전

zsh -ixc : 2>&1 | grep thingToSearchHere

옵션에 대한 간략한 설명

-i     Force shell to be interactive.

-c     Take the first argument as a command to execute

-x      -- equivalent to --xtrace

-l      Make bash act as if invoked as a login shell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.