Por que 'kill -l' fornece resultados diferentes em fish e bash

0

Eu estava usando fish-shell ao ler sobre o comando kill. A saída do comando kill -l para fish é

HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM
....

Ao invocar o mesmo comando no bash eu tive

 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 ....     

Eu verifiquei kill with where, e existe um caminho válido para o programa / usr / bin / kill. Eu também verifiquei o homem bash para matar, e não encontrei nada conectado para se matar :(, por isso não é bash builtin. Eu também tentei matar -l no tcsh e a saída foi mais uma vez diferente. Este não é um problema muito importante para mim, mas eu realmente curioso por que isso se parece com isso. Estou usando o clone RHEL7.

    
por Alex Baranowski 21.08.2016 / 23:02

2 respostas

3

Ainda pode ser um shell integrado mesmo quando não documentado:

~ (101) bash
tom@vmw-debian7-64:~$ 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
tom@vmw-debian7-64:~$ type kill
kill is a shell builtin
tom@vmw-debian7-64:~$ 

Com peixe:

tom@vmw-debian7-64:~$ fish
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
tom@vmw-debian7-64 ~> kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
tom@vmw-debian7-64 ~> type kill
kill is /bin/kill
tom@vmw-debian7-64 ~> 

com zsh

tom@vmw-debian7-64:~$ zsh
vmw-debian7-64% kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
vmw-debian7-64% type kill
kill is a shell builtin

com tcsh

tom@vmw-debian7-64:~$ tcsh
~ (101) kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT 
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS 
RTMIN RTMIN+1 RTMIN+2 RTMIN+3 RTMAX-3 RTMAX-2 RTMAX-1 RTMAX 
~ (102) type kill
type: Command not found.
~ (103) which kill
kill: shell built-in command.
~ (104) which which
which: shell built-in command.

É também incorporado para traços, mas a listagem é uma única coluna ...

...
RTMAX-8
RTMAX-7
RTMAX-6
RTMAX-5
RTMAX-4
RTMAX-3
RTMAX-2
RTMAX-1
RTMAX
$ type kill
kill is a shell builtin
$ which kill
/bin/kill
$ /bin/kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS

Eu obteria resultados semelhantes para outros sistemas (o bom sobre o código portátil). Quanto a whereis , a página de manual diz

    WHEREIS(1)                       User Commands                          WHEREIS(1)



    NAME
           whereis  -  locate the binary, source, and manual page files for a com‐
           mand

observe o binário (ele não tenta procurar por built-ins ou aliases de shell).

    
por 21.08.2016 / 23:13
1

kill é um shell incorporado:

$ type kill
kill is a shell builtin

... o que explica as implementações ligeiramente diferentes em diferentes shells.

which (e whereis ) não são construídos em shell, então eles não podem dizer com segurança se outro comando é na verdade um shell embutido, somente se ou não (e onde) eles podem encontrar uma cópia desse comando que não é embutido.

    
por 21.08.2016 / 23:11