
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] 또 다른 단점은 별칭을 재귀적으로 해결하지 못한다는 것입니다.