为什么/ bin/kill的有效信号与kill不同?

rut*_*ike 4 bash signals kill

我试图写一个快速的bash脚本,该脚本检测在一定条件下对信号的程序,并且通过习惯势力我使用的完整路径,一些斌utils的,即/bin/rm/bin/kill代替rmkill.随着kill特别,不过,我注意到在有效的信号,我可以送一个区别,这是困惑我:

[root@linux]# which kill
/bin/kill

[root@linux]# /bin/kill -l
HUP INT QUIT ILL ABRT FPE KILL SEGV PIPE ALRM TERM USR1 USR2 CHLD CONT
STOP TSTP TTIN TTOU TRAP IOT BUS SYS STKFLT URG IO POLL CLD XCPU XFSZ
VTALRM PROF PWR WINCH UNUSED

[root@linux]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
Run Code Online (Sandbox Code Playgroud)

我也没有杀人的别名:

[root@linux]# alias 
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
Run Code Online (Sandbox Code Playgroud)

显然,修复只是使用kill,但如果which kill做出决定,它们为什么会有所不同/bin/kill呢?

Ant*_*nko 8

kill是内置的bash.不幸的是,bash没有内置功能which(就像zsh告诉我的那样,kill是一个内置的shell命令),并且/usr/bin/which无法知道你的shell内置函数.(我希望bash有一些相同的东西可以快速检查命令是否内置.但是,成功help kill对于交互式使用来说已经足够了).

正如@chepner在评论中所解释的那样,type -a COMMAND可用于获取以下内容的任何目录中的COMMAND内置函数,别名,函数和二进制文件的可用变体列表:PATH

$ type -a kill
kill is a shell builtin
kill is /bin/kill
Run Code Online (Sandbox Code Playgroud)

  • 在`bash`中,`type -a CMD`告诉你所有可用的`CMD`:内置函数,别名,函数和`PATH`中的*any*目录.在我的一个Linux机器上,它报告`kill`为内置,`/ bin/kill`和`/ usr/bin/kill`. (5认同)