4

我正在尝试编写一个快速 bash 脚本来在脚本检测到的特定条件下向程序发出信号,并且出于习惯,我正在使用一些 bin utils 的完整路径,即代替/bin/rmand 。但是,特别是,我注意到我可以发送的有效信号有所不同,这让我感到困惑:/bin/killrmkillkill

[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

我也没有任何 kill 别名:

[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'

显然,解决方法是只使用,但是如果解决了kill,为什么它们会有所不同呢? which kill/bin/kill

4

1 回答 1

10

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
于 2013-02-07T16:47:24.397 回答