감시 명령 별명 확장


67

watch별명이 포함 된 명령을 실행하면 별명이 확장되지 않습니다. 실제로 다음 별명을 사용하여 작은 따옴표와 큰 따옴표로 모두 시도했습니다.

# alias ll
alias ll='ls -l --color=tty'

다음 명령은 실패합니다

# watch ll
sh: ll: command not found

이 경우 명령 줄 확장이 작동하지 않아야합니까?

답변:


98

별명은 첫 번째 인수 또는 명령 끝에 후행 공백이있는 다른 별명으로 만 확장됩니다.

bashhelp alias:

VALUE의 후행 공백은 별명이 확장 될 때 다음 단어에서 별명 대체를 검사합니다.

이렇게하려면 다음을 시도하십시오.

alias watch='watch '
alias ll='ls -l --color=tty'
watch ll

일부 버전 명심 watch기본적으로 스트립 색상, 어떤 버전이 사용하여 중지 할 수 있습니다 --color또는 -G.


1
이것은 절대적으로 멋진 답변입니다! 감사합니다. 물론 +1입니다.
ztank1013

1
고마워 ...이 시간 동안, 나는 ll, 2. ctrl + alt + e를 누르고 3. 접두어 시계를 사용했다. 이것은 시간 절약입니다.
anishsane

10
불행하게도이 방법은 watch별칭이 다음 단어 여야 하기 때문에 옵션을 제공 할 수 없다는 제한이 있지만 watch명령을 실행하기 전에 인수가 필요합니다. 을 시도 watch -n 10 <alias>하면 bash가 별칭을 확장하지 않습니다. 이 문제를 해결하려면 원하는 옵션이 포함 된 별칭 (예 :`alias watch-10 = 'watch -n 10')이 여전히 뒤에 공백이 있어야합니다.
indiv

2

시계가 별칭을보기 전에 수동으로 별칭을 확장 할 수 있습니까?

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

원하는대로 작동합니다. 이것은 끔찍하며 모든 상황에서 실패합니다. 죄송합니다.


0

여기서 기본적인 문제는 실행 중이라고 생각했는데 watch인수가 " sh -c"에 주어집니다. 이는 환경에 별칭 ll이 정의되어 sh(dash shell's)있지 않으면 확장 되지 않음 을 의미 합니다. 그러나 나는 틀렸고 이것은 사실이 아니다. 위의 크리스의 대답은 옳다.


2
정확히. 시도하십시오 watch 'alias ll="ls -l --color=tty"; type ll; ll'.
Chris Down

즉시 확인하여 +1합니다. 나는 위에 잘못했다.
Sachin Divekar

@ChrisDown이므로 시계에서 " sh -c"를 사용하더라도 설명도 적용 할 수 sh있습니다. 내가 맞아?
Sachin Divekar

1
이것은 어떤 쉘이 사용되는지에 달려 sh있습니다. 이 작동 합니다.sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
크리스 다운

0

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 나는 이것이 위대한 대답이라고 생각했지만 그것이 효과가 없다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.