두 가지 별칭이 있습니다.
alias rm='python my/rm/script.py '
alias docker='sudo docker '
문제는 문을 실행할 때 $ docker rm ARGS
키워드가 rm
별칭으로 확장되고 docker가 불평한다는 것입니다.'python' is not a docker command.
여러 가지 해결책을 찾아봤습니다. 한 가지 해결책은 키워드를 사용하는 것입니다 command
. 다른 하나는 shopt
별칭 확장을 전환하는 것입니다. 나는 그것들을 최대한 활용하지 못했습니다.
다음 중 어느 것도 나에게 적합하지 않습니다.
alias docker='shopt -u expand_aliases; sudo docker '
alias docker='command sudo docker '
Unalias 작동 방식:
alias docker='unalias rm; sudo docker '
unalias의 문제는 docker 명령이 실행된 것과 상관없이 잠시 후 실행 중인 셸 환경에 rm 별칭이 더 이상 존재하지 않는다는 사실을 잊어버린다는 것입니다. 따라서 rm
파일에 사용하면 즉시 삭제되고 Python 스크립트는 안전망 역할을 하며 삭제할 파일을 휴지통으로 옮깁니다. 나는 실수로 rm 별칭 대신 GNU rm 명령을 사용하게 되는 상황을 피하고 싶습니다. 이것이 바로 unalias를 사용하고 싶지 않은 이유입니다.
또 다른 해결책은 도커 별칭을 포기하는 것입니다. 단점은 sudo
실행하려는 모든 유용한 docker 명령에 대해 키워드를 작성해야 한다는 것입니다. 그것은 자질구레한 일이므로 도커 별칭을 사용하지 않습니다.
또 다른 해결책은 다음과 같이 rm 키워드를 이스케이프하는 것입니다.
docker \rm ARGS
이것은 작동합니다. 하지만 여기에 "설정하고 잊어버리는" 솔루션이 있어서 다른 것에 대해 걱정할 필요 없이 자연스럽게 docker 명령을 실행할 수 있기를 바랍니다.
rm
위의 제한 사항을 고려할 때 rm 및 docker에서 별칭을 사용하면서 키워드가 docker 명령에서 별칭으로 확장되지 않도록 하려면 어떻게 해야 합니까 ?
답변1
rm
별칭을 사용한 후에 사용할 때 별칭이 확장되는 이유는 docker
별칭 정의의 docker
끝에 공백이 포함되어 있기 때문입니다. 별칭 정의 끝에 공백을 추가하는 것은이것다음 단어에 별칭 확장을 적용하도록 쉘에 요청하는 방법입니다.
해결책: docker
별칭을 정의할 때 끝에 공백을 추가하지 마십시오. 다른 별칭 끝에 있는 공백을 제거할 수도 있습니다.
docker
사용자를 그룹에 추가하여 별칭을 완전히 제거할 수도 있지만 docker
이는 로컬에서 내리는 관리 결정입니다.