별칭이 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
명령에 두 가지 문제가 있습니다.
bash -i
대화형 쉘 세션을 시작하며watch
대화형 명령과 함께 사용할 수 없습니다. 이것이 "중지됨" 메시지가 나타나는 이유입니다. 쉘에서 이 명령을 실행하면zsh
이 명령도 표시됩니다suspended (tty output)
.- 별칭은 하위 프로세스에 의해 상속되지 않습니다. 즉,
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'