나는 docker ps
초월하려고 노력한다docker ps --format="table {{.ID}} {{.Image}} {{.Status}}"
나는 읽었다이 문제및 참조 문서가 있지만 제대로 작동하지 않습니다.
나는 몇 가지 "컴파일" 접근 방식을 시도했는데 이것이 최신 시도입니다.
alias func='dockerps'
function dockerps() {
'docker ps'='docker ps --format="table {{.ID}} {{.Image}} {{.Status}}"'$\
}
docker ps
입력할 때 서식이 유지 되도록 코드를 수정하려면 어떻게 해야 합니까 ?
답변1
여러 단어로 구성된 별칭 같은 것은 없습니다. 당신이 언급한 SO 답변은 나에게 완전히 잘못된 것 같습니다. 그것은 말이 되지 않으며 zsh 역사 4.3을 파고들 때에도 원하는 효과에 가까운 것을 생성하는 함수의 흔적을 찾을 수 없습니다(zsh An 개발 버전에 있었을 수 있는 실험적 기능)은 5.0 릴리스 이전에 제거되었습니다. 작성한 내용은 잘 정의된 의미를 갖습니다. 별칭 func
과 이라는 함수를 정의하므로 dockerps
첫 번째 단어가 또는 인 명령줄에서만 작동합니다. 함수가 호출되면 잘못된 이름으로 변수를 설정하려고 시도하지만 실패합니다.func
dockerps
Zsh를 사용하면 특수 문자가 포함된 단어에 대한 별칭을 정의할 수 있습니다.
darkstar% alias "'docker ps'"='echo docker ps in single quotes'
darkstar% alias 'docker\ ps'='echo docker backslash ps'
darkstar% 'docker ps'
docker ps in single quotes
darkstar% docker\ ps
docker backslash ps
darkstar% "docker ps"
zsh: command not found: docker ps
하지만 특별히 유용하지는 않습니다. 'docker ps'
한 단어가 아니라 docker ps
두 단어입니다.
일반적인 방법으로 수행해야 합니다. 즉 docker
, 라는 함수를 정의하고 해당 인수를 분석하도록 합니다. 이는 전역 옵션을 지원하는 간단한 버전이지만 매개변수가 있는 전역 옵션 --option=value
대신 사용해야 합니다 --option value
.
docker () {
setopt local_options extended_glob unset
local -i i=$argv[(i)^-*]
# $argv[i] is the first non-option argument (or empty if there is none).
# See if we want to insert something after it.
case $argv[i] in
ps) argv[i+1,i]=(--format="table {{.ID}} {{.Image}} {{.Status}}");;
esac
command docker "$@"
}
답변2
기술적으로는 버그 기능이 어디서 나오는지와 같이 csh
다음 alias
과 같이 할 수 있습니다.
alias docker='docker '
alias ps='ps --format="table {{.ID}} {{.Image}} {{.Status}}"'
이렇게 하면 원하는 결과를 얻을 수 있지만 이는 다음을 의미합니다.
- 뒤에 나오는 모든 단어는
docker
별칭 확장의 영향을 받습니다. (이 트릭은 명령 을 인수로 취하는 와 같은 명령alias cmd='cmd '
에 적용되므로 별칭도 그 뒤에 확장됩니다.)command
env
sudo
ps
앞에 없는 단어도 확장됩니다 . 즉 , 호출 문구를 변경하지 않는 한 더 이상 독립 실행형 명령을 실행할docker
수 없습니다 (예 : ).ps
"ps" -ef
여기서는 새로운 것을 정의합니다.주문하다원하는 작업을 수행하는 원래 이름과 충돌하지 않도록 다른 이름을 사용하십시오.
my-docker-ps() docker ps --format="table {{.ID}} {{.Image}} {{.Status}}" "$@"
이는 함수로 구현되지만 셸 외부에서도 사용할 수 있도록 스크립트로 구현하는 것이 더 나을 수도 있습니다.