我正在尝试编写一个快速的bash脚本,在脚本检测到的特定条件下向程序发出信号,并且习惯于使用一些bin工具的完整路径,即/bin/rm和/bin/kill,而不是rm和kill。但是,对于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我也没有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,它们为什么会不同呢?
发布于 2013-02-08 00:47:24
kill是一个内置的bash。不幸的是,bash没有内置的which (就像zsh一样,它直接告诉我kill是一个内置的shell命令),并且/usr/bin/which没有办法知道您的shell内置的东西。(我希望bash有一些等效的东西来快速检查命令是否内置。不过,Successfull help kill对于交互使用来说已经足够了)。
正如@chepner在评论中所解释的那样,type -a COMMAND可用于获取COMMAND的可用变体列表:PATH上任何目录中的内置、别名、函数和二进制文件
$ type -a kill
kill is a shell builtin
kill is /bin/killhttps://stackoverflow.com/questions/14756247
复制相似问题