zsh처럼 bash에서 "전역" 별칭을 설정할 수 있는지 궁금합니다.-G별칭 옵션 - 사용자 관점에서 "전역"이 아니라 쉘 관점에서.
내가 알고 싶은 것은 별칭(또는 다른 것?)을 bash의 어느 곳에서나 교체할 수 있다는 것입니다.
예를 들어. :
alias ...='../..'
답변1
Bash 별칭에는 이 기능이 없지만 다음과 같이 작성할 수 있습니다.
alias cd='cd '
alias ...='../..'
cd ... # teleport to ../..
설명하다:
배쉬 참조 매뉴얼설명하다:
별칭 값의 마지막 문자가 비어 있으면 별칭 뒤의 다음 명령 단어에서도 별칭 확장이 확인됩니다.
가능한 해결책은 Readline
매크로입니다. 당신은 쓸 수 있습니다:
set -o emacs
bind '"\C-x...":"cd ../.."'
echo
, Control+ x,를 입력하세요 ....
넌 봐야 해echo cd ../..
바라보다
- "키 바인딩"Readline 초기화 파일 구문
help bind
답변2
bash(1)
매뉴얼 페이지 에서 :
ALIASES
Aliases allow a string to be substituted for a word when it is used as
the first word of a simple command. [...]
따라서 bash
별칭에는 이 능력이 없고 bash
사소한 능력도 없습니다 pre-exec
(그러나이봐그러나 해커의 경우).
로서부분의해결 방법을 사용할 수도 있습니다.마치다최소한의 시작점인 함수:
function _comp_cd() {
local cur=${COMP_WORDS[COMP_CWORD]} # the current token
[[ $cur =~ \.\.\. ]] && {
cur=${cur/.../..\/..}
COMPREPLY=( $cur )
return
}
COMPREPLY=() # let default kick in
}
complete -o bashdefault -o default -F _comp_cd cd
이제 명령에서 Tab 키를 눌렀을 때 cd
커서 아래의 단어에 "..."가 포함되어 있으면 각 단어가 "../.."로 대체됩니다. 그러나 완료에는 작은 문제가 있습니다(복잡도를 계산하지 않음). 이는 아마도 위에서 짐작할 수 있듯이 명령별로 지정해야 한다는 것입니다.
이것배쉬 완성 패키지완료 함수를 즉석에서 로드하여 이를 처리하려면 기본 완료 핸들러를 사용하세요. 모험을 즐기고 싶다면 _filedir()
대체 "..."와 같은 내용을 포함하도록 일반 파일/디렉토리 확장을 위한 내부 기능을 수정할 수 있어야 합니다.
(이 모든 것은 "..."을 작동시키는 NetWare 셸을 연상시킵니다.)
답변3
bash 별칭은 줄의 첫 번째 단어를 기반으로만 작동하며 zsh처럼 전역적 의미로 정의할 수 없습니다.
내가 생각할 수 있는 유일한 방법은 다음과 같은 변수를 정의하는 것입니다.
export PP=../.. # $PP meaning parent of parent
cd $PP/anotherDirectory
하지만 솔직히 말해서 이 경우에는 그냥 ../..라고 입력하는 편이 낫습니다. 간단히 말해서 bash는 그것을하지 않습니다.