watch 명령의 별명이 중지되었습니까?

watch 명령의 별명이 중지되었습니까?

별칭이 watch 문에서 확장되도록 이 별칭을 만들었습니다.

> alias w='watch -x bash -i -c'
> alias k=kubectl

나는 그것을 실행한다:

> w 'k get pods; echo; k get svc'

2초 후에 나는 다음을 본다:

[2]+  Stopped                 watch -x bash -i -c 'k get pods; echo; k get svc'

watch 명령이 중지되었습니다.

watch 명령이 중지되는 이유는 무엇입니까?

버전: 배쉬 5.1.16. 우분투 22.04.

답변1

명령에 두 가지 문제가 있습니다.

  1. bash -i대화형 쉘 세션을 시작하며 watch대화형 명령과 함께 사용할 수 없습니다. 이것이 "중지됨" 메시지가 나타나는 이유입니다. 쉘에서 이 명령을 실행하면 zsh이 명령도 표시됩니다 suspended (tty output).
  2. 별칭은 하위 프로세스에 의해 상속되지 않습니다. 즉, k셸의 별칭은 "모니터링" 중인 셸에 표시되지 않습니다.

대신에:

watch -x bash -c 'kubectl get pods; echo; kubectl get svc'

또는,

watch 'kubectl get pods; echo; kubectl get svc'

bash을 사용하여 대화형 셸을 실행하지 않으며 watch정의되지 않은 별칭을 사용하려고 시도하지 않습니다.

별칭을 확장하기 위해 대화형 셸을 실행하는 경우 bash해당 expand_aliases셸 옵션을 사용하세요.

watch -x bash -O expand_aliases -c $'alias k=kubectl\nk get pods; echo; k get svc'

인라인 스크립트에서 별칭을 정의해야 하며 별칭 정의 뒤에 리터럴 줄 바꿈도 삽입해야 합니다(별칭이 정의된 동일한 줄에서는 별칭을 사용할 수 없습니다). 나는 명령 문자열을 C 문자열()로 만든 다음 개행 문자를 추가하여 $'...'이를 달성했습니다 \n. 다음과 같이 명령 문자열에 리터럴 줄 바꿈을 삽입할 수도 있습니다.

watch -x bash -O expand_aliases -c 'alias k=kubectl
k get pods; echo; k get svc'

관련 정보