bash에서 인라인 별칭을 확장하는 방법은 무엇입니까?


84

bash에서 별칭을 인라인으로 확장하는 방법이 있습니까?

$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l 

답변:


107

당신은 눌러 Ctrl- Alt- e의 readline 기능을 수행하기 위해 shell-expand-line별칭, 역사, 단어 확장을 할 것입니다. 일부 키보드 Meta는 그렇지 않습니다 Alt. 당신은 Esc다음 을 눌러야 할 수도 있습니다 Ctrl-e

기능 alias-expand-line과는 history-and-alias-expand-line기본적으로 바인딩되지 않습니다,하지만 당신은 당신에 다음과 같은 라인을 추가하여 바인딩 할 수 있습니다 ~/.inputrc파일을.

"\e\C-l": alias-expand-line

만들 것이다 Ctrl- Alt- l(소문자 "엘")가 수행 에만 별칭 확장을.


다른 bash 완료에 영향을주지 않고 별칭 확장을 <tab>에 매핑 할 수 있습니까?
asdfg

2
@ asdfg : 그렇게하면 다른 완료를 깰 수 있습니다. 그것은 수도 위와 같이지도를 만들기 위해 (테스트되지 않은) 작업 후 탭에 대한 기존 바꾸려면이 추가 맵을 추가 : "\C-i": "\e\C-l\e\e"모두 수행하는 매크로 생성 alias-expand-linecomplete. 위의 답변에서 나온 바인딩과 Esc-Esc의 기본 바인딩은 그대로 유지됩니다. 기본 완료를 원한다면 여전히 Esc-Esc를 수행 할 수 있습니다.
Dennis Williamson

4
실제로 ESC C-eBash에서는 C-x a작동 하지만 Zsh 에서는 작동합니다. OS X에서도 테스트되었습니다.
Blaz

단순히 "x"키가 될 수있는 Ctrl + something을 찾고 있다면 일부 시스템에서 다음과 같이 할 수 있습니다 Control-x: history-and-alias-expand-line.
igordcard

1
@WeijunZhou : 창 관리자와 사용자 정의 설정에 따라 다릅니다. 예를 들어 그놈의 경우 잠금 화면은 Super + L입니다.
Dennis Williamson

2

이것은 실제로 시도하려는 작업을 수행하는 훨씬 간단한 방법 일 수 있습니다 ( bashversion> = 4.2.29).

shopt -s direxpand
shopt -s expand_aliases

shoptman페이지 : https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html


3
이것은 잘못이다. 쉘 옵션 "direxpand"및 "expand_aliases"는 질문이 지정한대로 인라인을 확장하는 데 도움이되지 않습니다. 어떤 모자 "direxpand"를 가져 왔는지 모르겠습니다 ...? 기본적으로 "expand_aliases"는 이미 설정되어 있습니다. 설정을 해제하면 기본적으로 별칭이 작동하지 않게됩니다 (명령 줄 해석 전에 확장되지 않음). 예를 들어, 별명 alias ll='ls -l이 주어지면 쉘은 'll'을 존재하지 않는 명령 / 함수 'll'로 해석합니다.
FooF

0

작동하지 않습니다. 그러나 나는 당신이하고 싶은 일을하기 위해 이와 같은 것을 추측 / 호핑하고 있습니다. 자체 완성 스크립트를 사용해야합니다. 이것은 당신이 하나를 만드는 방법입니다 :

_ll()
{
     COMPREPLY=(ls -l)
     #The next line does not work. I just hope there were a way to replace that word
     COMP_WORDS[COMP_CWORD-1]="ls -l"
}
complete -F _ll ll

이제 전체 bash_completion 파일 ( http://caliban.org/bash )을 소싱하고 위에서 언급 한 스크립트를 bash_completion.d 디렉토리 안에있는 파일에 넣고 URL에서 가져온 스크립트를 가져 오십시오. 작동하지 않는 경우 알려주십시오.

감사.


0

zsh를 설치하여 간단한 솔루션을 찾는 사람들 에게는 globalias 가 친구가 될 수 있습니다.

모든 glob 표현식, 부속 명령 및 별명 (전역 포함)을 확장합니다.

# .zsrc:
alias S="sudo systemctl"

$ S<space>
# expands to:
$ sudo systemctl

설치하려면 "globalias"를 .zshrc 플러그인 목록에 추가하십시오.

plugins=(... globalias)

그런 다음을 눌러 SPACE작성한 명령의 확장을 트리거하십시오.

명령 행을 확장하지 않고 공백 만 삽입하려면을 누르십시오. CTRL+SPACE

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