alias rm='rm -i'
내 파일에 있어요 ~/.bashrc
(방금 알게 됐어요)나쁜 습관으로 간주일부).
이것을 실행할 때 별칭은 고려되지 않는 것 같습니다 nice
.
bli@naples:~$ touch test
bli@naples:~$ rm test
rm: remove regular empty file 'test'? n
bli@naples:~$ nice rm test
bli@naples:~$
왜 이런 일이 발생합니까?
답변1
기본적으로 nice
이는 외부 명령입니다.
$ command -v nice
/usr/bin/nice
이는 쉘 기능인 별칭에 대해 알지 못한다는 것을 의미합니다.
$ alias foo='echo hello'
$ foo
hello
$ nice foo
nice: foo: No such file or directory
그러나 쉘에는 앨리어싱을 허용하는 기능이 있습니다.반품더 많은 별칭으로 확장되었습니다. 확장은 공백으로 끝납니다.
$ alias nice='/usr/bin/nice '
마지막 공간을 찾는 것이 중요합니다.
지금...
$ nice foo
hello
$ command -v nice
alias nice='/usr/bin/nice '
쉘이 별칭 확장을 수행하도록 하려면 모든 외부 명령을 해당 별칭으로 래핑할 수 있습니다.
답변2
nice
아니요 bash
. bash
별칭을 바꾸지 않고 별칭을 바꿉니다 nice
. 별칭을 사용하는 것은 bash의 독특한 기능입니다. zsh, ksh,...so: 쉘 함수도 있습니다. nice
껍질이 아닙니다.
답변3
nice
exec(3)
쉘 별명에 대해 아무것도 모르는 시스템 호출 중 하나가 사용됩니다 . 전역 별칭 교체는 일부 셸(예: ZSH)에서 수행할 수 있으며 비록 이것이 큰 총이라고 생각하지만 다음 10세대에 대한 경고로 언급하는 것뿐입니다.
% alias -g rm='rm -i'
% echo hi rm there
hi rm -i there
%