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] 또 다른 단점은 별칭을 재귀적으로 확인할 수 없다는 것입니다.