답변을 온라인으로 검색해 보았지만 답변(존재하는 경우)이 쉘 스크립트의 다른 도트 애플리케이션에 의해 가려졌습니다. 그래서 그게 다입니다.
편집하다:이는 Fedora의 기본 구성과 관련이 있으므로 command_not_found_handle
bash 소스 코드와는 아무 관련이 없는 것으로 나타났습니다./편집하다
Bash는 일반적으로 명령 누락에 대해 불평하지만 명령줄에 입력한 내용도 디렉터리라는 것을 알았습니다.
[root@localhost tmp] # mkdir test
[root@localhost tmp] # test
[root@localhost tmp] # nonexistent
bash: nonexistent: command not found...
[root@localhost tmp] # test
[root@localhost tmp] # cd test
[root@localhost test] # empty
bash: empty: command not found...
[root@localhost test] # .
bash: .: filename argument required
.: usage: . filename [arguments]
[root@localhost test] # ..
위의 내용은 분명히 유효하고 예상됩니다. 그러나 이것들은:
[root@localhost test] # ....
[root@localhost test] # .........................
[root@localhost test] # .whatever
[root@localhost test] # ..........whatever
[root@localhost test] # ......œę©æąðæćþóœ
[root@localhost test] # .ignored
[root@localhost test] # touch .whatever
[root@localhost test] # .whatever
[root@localhost test] # file .whatever
.whatever: empty
[root@localhost test] # file .ignored
.ignored: cannot open '.ignored' (No such file or directory)
[root@localhost test] # .ignored
[root@localhost test] # .whatever follows is just discarded
[root@localhost test] #
내가 입력하는 내용을 조용히 무시하세요.
이것은 사람들이 기대하는 것이 아닙니다. 이런 행동에 이유가 있나요?
편집: 사용 사례를 찾았습니다!
[root@localhost ~] # ...|cat
[root@localhost ~] # ...|nonexistent
bash: nonexistent: command not found...
[root@localhost ~] # ...|nonexistent && echo works
bash: nonexistent: command not found...
[root@localhost ~] # ...|nonexistent || echo works
bash: nonexistent: command not found...
works
[root@localhost ~] # ...|cat && echo works
works
[root@localhost ~] # ...|cat || echo works
[root@localhost ~] #
PATH
분명히 이를 통해 실행 파일을 실행하지 않고도 실행 파일이 열려 있는지 확인할 수 있습니다 . cat이 차단되지 않는 것을 볼 수 있습니다. 구현되지 않았습니다.
이건 좀 우스꽝스럽습니다. 재미있게 보내세요!
[root@localhost ~] # LANG=en bash --version
GNU bash, version 4.3.42(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
편집 2:
[root@localhost ~] # declare -f command_not_found_handle
command_not_found_handle ()
{
local runcnf=1;
local retval=127;
[[ $- =~ i ]] || runcnf=0;
[[ ! -S /var/run/dbus/system_bus_socket ]] && runcnf=0;
[[ ! -x '/usr/libexec/packagekitd' ]] && runcnf=0;
[[ -n ${COMP_CWORD-} ]] && runcnf=0;
if [ $runcnf -eq 1 ]; then
'/usr/libexec/pk-command-not-found' "$@";
retval=$?;
else
if [[ -n "${BASH_VERSION-}" ]]; then
printf 'bash: %scommand not found\n' "${1:+$1: }" 1>&2;
fi;
fi;
return $retval
}
답변1
예상치 못한 동작은 Fedora의 기본 구현으로 인한 것으로 밝혀졌습니다 command_not_found_handle
. 나에게 그 존재를 알려준 @TNW에게 감사드립니다.
그 후에 unset command_not_found_handle
는 예상대로 작동했습니다.
이것이 버그인지 한계인지는 모르겠습니다.