Space Hack을 사용하여 제공된 인수로 별칭 후행 작업을 수행하는 방법

Space Hack을 사용하여 제공된 인수로 별칭 후행 작업을 수행하는 방법

watchExpand두 개의 별칭 이 있고 l. 다음과 같이 뒤에 공백을 넣어 bash 확장이 별칭과 함께 작동하도록 할 수 있다는 것을 알고 있습니다.

alias watchExpand='watch '

l별칭은 ls -larthiF --context.so입니다. 명령을 입력하면 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] 런을 사용하면 1초에 1개 구매를 하기에는 너무 무겁게 느껴집니다 watch -n 1. 이 문제를 해결할 방법을 찾아야 할 수도 있습니다.

[3] 또 다른 단점은 별칭을 재귀적으로 확인할 수 없다는 것입니다.

관련 정보