답변:
별명은 첫 번째 인수 또는 명령 끝에 후행 공백이있는 다른 별명으로 만 확장됩니다.
님 bash
의 help alias
:
VALUE의 후행 공백은 별명이 확장 될 때 다음 단어에서 별명 대체를 검사합니다.
이렇게하려면 다음을 시도하십시오.
alias watch='watch '
alias ll='ls -l --color=tty'
watch ll
일부 버전 명심 watch
기본적으로 스트립 색상, 어떤 버전이 사용하여 중지 할 수 있습니다 --color
또는 -G
.
watch
별칭이 다음 단어 여야 하기 때문에 옵션을 제공 할 수 없다는 제한이 있지만 watch
명령을 실행하기 전에 인수가 필요합니다. 을 시도 watch -n 10 <alias>
하면 bash가 별칭을 확장하지 않습니다. 이 문제를 해결하려면 원하는 옵션이 포함 된 별칭 (예 :`alias watch-10 = 'watch -n 10')이 여전히 뒤에 공백이 있어야합니다.
시계가 별칭을보기 전에 수동으로 별칭을 확장 할 수 있습니까?
watch $(alias ll | cut -d\' -f2)
출력 결과는 alias ll
다음과 같습니다.
$ alias ll
alias ll='ls -lAGh'
그래서 우리는 cut의 delimeter를 작은 따옴표로 설정하고 두 번째 필드를 잘라 내고 다음을 남깁니다.
ls -lAGh
즉 확장 된 별칭입니다. 그런 다음에 주어진 인수를 형성합니다 watch
.
function watcha {
watch $(alias "$@" | cut -d\' -f2)
}
그때,
watcha ll
원하는대로 작동합니다. 이것은 끔찍하며 모든 상황에서 실패합니다. 죄송합니다.
여기서 기본적인 문제는 실행 중이라고 생각했는데 watch
인수가 " sh -c
"에 주어집니다. 이는 환경에 별칭 ll
이 정의되어 sh(dash shell's)
있지 않으면 확장 되지 않음 을 의미 합니다. 그러나 나는 틀렸고 이것은 사실이 아니다. 위의 크리스의 대답은 옳다.
watch 'alias ll="ls -l --color=tty"; type ll; ll'
.
sh -c
"를 사용하더라도 설명도 적용 할 수 sh
있습니다. 내가 맞아?
sh
있습니다. 이 작동 합니다.sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
한 watch
별칭을 확장하는 새로운 대화 형 쉘을 실행합니다 :
watch -x bash -i -c ll
합니다 (이 -x
정지하기위한 것입니다 watch
이 소유하고있어 사용하는 sh -c
우리의 주어진 명령을 포장. 우리는 우리가 통과해야하기 때문에 것을 원하지 않는 -i
으로 sh
또는 bash
, 수 있도록하는 것이 .bashrc에를 읽고 별칭을 정의하는 대화 형 쉘,.으로는 -x
, 시계 실행 exec를 사용하는 명령)
가, 실제로는 작동하지 않습니다. 'll'의 출력을 한 번 표시 한 다음 2 초 동안 잠 자면 작업이 약간 수수께끼로 배경이됩니다.
1]+ Stopped watch -x bash -i -c ll
왜 멈췄습니까? 열린 버팀대는 [
어디로 갔습니까? Darn 나는 이것이 위대한 대답이라고 생각했지만 그것이 효과가 없다.