zsh - 긴 명령 인라인 확장을 위한 바로가기를 올바르게 만드는 방법

zsh - 긴 명령 인라인 확장을 위한 바로가기를 올바르게 만드는 방법

명령 조각의 인라인 확장을 만드는 가장 좋은 방법을 찾으려고 노력 중입니다. "긴 형식"은 다음과 같습니다.

kubectl get pods --show-labels

또는

 kubectl get po -o custom-columns=NAME:'{.metadata.name}',OWNER:'{.metadata.ownerReferences[0].name}',OWNER_KIND:'{.metadata. ownerReferences[0].kind}'

먼저 다음을 사용했습니다.

function sl(){
  echo " --show-labels"
}

  kubectl get pods `sl`

이는 작동하지만 다음은 작동하지 않습니다.

function kown(){
  echo "custom-columns=NAME:'{.metadata.name}',OWNER:'{.metadata.ownerReferences[0].name}',OWNER_KIND:'{.metadata.ownerReferences[0].kind}'"
}

kubectl get po -o `kown`

error: unexpected path string, expected a 'name1.name2' or '.name1.name2' or '{name1.name2}' or '{.name1.name2}'

두 번째는 왜 작동하지 않습니까? 백틱과 함수 외에 더 좋은 방법이 있나요? 환경 변수에 대해 생각하고 있었지만 확실하지 않았습니다. 어떤 아이디어라도 감사드립니다.

답변1

zsh첫째, 사용하기가 더 쉽습니다 .전역 별칭이런 종류의 경우:

alias -g sl='--show-labels'
alias -g kown='custom-columns=NAME:{.metadata.name},OWNER:{.metadata.ownerReferences[0].name},OWNER_KIND:{.metadata. ownerReferences[0].kind}'

'둘째, 작은따옴표를 사용하는 경우' ~에 "큰따옴표 ", 그 다음 작은따옴표문자 그대로문자열에서 명령에 전달합니다. 그것은 당신이 원하는 것이 아닙니다. 원래 명령줄의 작은따옴표는 쉘이 다음을 수행하는 것을 방지하기 위한 것입니다.확장문자열의 여러 하위 문자열에 대해. 제가 포장한 방법을 참고해주세요모두작은따옴표로 묶인 문자열입니다. 이렇게 하면 쉘이 문자열의 어느 위치에서나 문자열을 확장하는 것을 방지할 수 있습니다. 이는 일부 하위 문자열을 인용하는 것보다 훨씬 안전하고 타이핑도 적습니다.

마지막으로 명령줄의 아무 곳에나 입력하기만 하면 전역 별칭을 사용할 수 있습니다.아니요인용 부호:

% kubectl get pods sl
% kubectl get po -o kown

참고: %이는 알림입니다. 그런 건 입력하지 마세요.

관련 정보