watch
별칭이 포함된 명령을 실행하면 별칭이 확장되지 않습니다. 실제로 다음 별칭을 제공하는 작은따옴표와 큰따옴표를 사용해 보았습니다.
# alias ll
alias ll='ls -l --color=tty'
다음 명령은 실패합니다
# watch ll
sh: ll: command not found
이 경우 명령줄 확장이 작동하면 안 되나요?
답변1
별칭은 첫 번째 인수로만 확장되거나 명령 끝에 후행 공백이 있는 다른 별칭 다음에 확장됩니다.
보낸 사람 :bash
help alias
별칭을 확장할 때 VALUE의 뒤에 공백이 있으면 다음 단어에서 별칭 대체가 있는지 확인됩니다.
이렇게 하려면 다음을 시도해 보세요.
alias watch='watch '
alias ll='ls -l --color=tty'
watch ll
일부 버전에서는 스트립 색상이 기본적으로 설정되어 있으며 watch
일부 버전에서는 또는 를 사용하여 중지할 수 있습니다.--color
-G
답변2
시계가 별칭을 보기 전에 별칭을 수동으로 확장할 수 있을까요?
watch $(alias ll | cut -d\' -f2)
설명하다
출력은 alias ll
다음과 같습니다.
$ alias ll
alias ll='ls -lAGh'
따라서 컷의 구분 기호를 작은따옴표로 설정하고 두 번째 필드를 잘라내어 다음과 같이 남깁니다.
ls -lAGh
즉, 확장의 별칭입니다.저것그러면 주어진 인수가 형성됩니다 watch
.
이를 수행하는 함수를 작성하십시오.
function watcha {
watch $(alias "$@" | cut -d\' -f2)
}
그 다음에,
watcha ll
예상대로 작동합니다. 이것은 짜증나고 모든 상황에서 실패합니다. 죄송합니다.
답변3
내가 사용하는 또 다른 트릭(특히 aliases kubectl
)은 k
별칭 대신 심볼릭 링크를 만드는 것입니다. 이렇게 하면 심볼릭 링크를 계속 찾을 수 watch
있으며 스푸핑이 필요하지 않습니다.
이것의 단점은 사용하려는 모든 별칭에 대해 이 작업을 수행해야 하며 쉘 내장에 대해 어떻게 작동하는지 잘 모르겠습니다.
답변4
이는 해당 --color
옵션을 사용하고 매개변수를 사용하여 -n
새로 고침 간격을 지정할 수 있는 옵션입니다.
swatch_usage() {
cat <<EOF >&2
NAME
swatch - execute a program periodically with "watch". Supports aliases.
SYNOPSIS
swatch [options] command
OPTIONS
-n, --interval seconds (default: 1)
Specify update interval. The command will not allow quicker than
0.1 second interval.
EOF
}
swatch() {
if [ $# -eq 0 ]; then
swatch_usage
return 1
fi
seconds=1
case "$1" in
-n)
seconds="$2"
args=${*:3}
;;
-h)
swatch_usage
return 1
;;
*)
seconds=1
args=${*:1}
;;
esac
watch --color -n "$seconds" --exec bash -ic "$args || true"
}
색상과 시간 지원이 필요할 뿐이지만 원하시면 더 추가하실 수 있을 거라 확신합니다.
이 기능의 핵심은 대화형 모드에서 bash를 사용하여 명령을 직접 실행하므로 일반적으로 bash에서 사용 가능한 모든 별칭이나 명령을 사용할 수 있다는 것입니다.
나는 스크립팅에 대한 경험이 없으므로 공정한 경고입니다. 귀하의 마일리지가 다를 수 있습니다. 가끔 Ctrl+를 C몇번 눌러야 멈출 때도 있는데 , 그럼에도 불구하고 6개월 동안 아무 문제 없이 자주 사용하고 있습니다.
요점 형식:https://gist.github.com/ablacklama/550420c597f9599cf804d57dd6aad131