Space Hack으로 별칭을 후미로 만드는 방법은 제공된 매개변수를 사용하여 작동합니다.

Space Hack으로 별칭을 후미로 만드는 방법은 제공된 매개변수를 사용하여 작동합니다.

watchExpand두 개의 별칭 이 있고 l. 다음과 같이 후행 공백을 배치하여 별칭을 사용하여 bash 확장 작업을 수행할 수 있다는 것을 알고 있습니다.

alias watchExpand='watch '

l로 별칭이 지정되었습니다 ls -larthiF --context. 그래서 명령을 입력하면 watchExpand l매력처럼 작동합니다.

watchExpand그러나 명령 에 매개변수를 제공하면 다음과 같습니다.

watchExpand -n 1 l

l별칭이 더 이상 작동하지 않습니다. 인수 후 bash 확장을 어떻게 얻을 수 있습니까?

답변1

여기에 나쁜 생각이 있습니다생각하다당신은 다음을 요구하고 있습니다 :

function watchExpand() {
  e=""
  for param in $@
  do
    if alias $param >/dev/null 2>&1
    then
      exp=$(alias $param | cut -d= -f2| sed -e s/^\'// -e s/\'\$//)
      e+=" $exp"
    else
      e+=" $param"
    fi
  done
  watch $e
}

답변2

Zsh에는 전역 별칭이 있습니다. 당신은 할 수 있습니다 :

alias -g @l='ls -larthiF --context'

그런 다음:

watch -n 1 @l

필수는 @아니지만 전역 별칭이 실수로 호출되는 것을 방지하기 위해 사용합니다.

답변3

나는 내 방식대로 해결책을 찾아낸다.

먼저, 원하는 경우 별칭/기능을 더 쉽게 추가하기 위해 "addExpand"라는 함수를 만듭니다.

xb@dnxb:/tmp/t$ type -a addExpand
addExpand is a function
addExpand () 
{ 
    echo -e "#!/bin/bash\nshopt -s expand_aliases\n. ~/.bash_aliases 2>/dev/null\n$1"' "$@"' | sudo tee /usr/bin/e_"$1";
    sudo chmod +x /usr/bin/e_"$1"
}
xb@dnxb:/tmp/t$ addExpand l
#!/bin/bash
shopt -s expand_aliases
. ~/.bash_aliases 2>/dev/null
l "$@"

을 실행하면 addExpand l별칭이 l다음과 같은 실행 파일로 생성됩니다./usr/bin/e_l다음 내용으로:

xb@dnxb:/tmp/t$ cat /usr/bin/e_l
#!/bin/bash
shopt -s expand_aliases
. ~/.bash_aliases 2>/dev/null
l "$@"

이제 별칭/함수 확장 버전을 사용해 보세요.

xb@dnxb:/tmp/t$ watch --color -n 1 e_l /tmp //works like a charm !!!
xb@dnxb:/tmp/t$ 

메모:

[1] e_l, 접두사 'e_'는 명령의 확장 버전을 의미합니다.

[2] 로 실행하면 매초마다 소싱을 하기에는 너무 무겁게 느껴집니다 watch -n 1. 이 문제를 해결할 방법을 찾아야 할 수도 있습니다.

[3] 또 다른 단점은 별칭을 재귀적으로 해결하지 못한다는 것입니다.

관련 정보