Como executo o comando para evitar interferência do shell [duplicado]

0

Às vezes, um mesmo comando é fornecido pelo shell-builtin e por outro arquivo / pacote. Exemplo:

$ type -a printf kill
printf is a shell builtin
printf is /usr/bin/printf
kill is a shell builtin
kill is /bin/kill

E durante a execução do comando, às vezes enfrento algumas dificuldades ou o comando não funciona como esperado.

Exemplo de man kill :

-L, --table
              List signal names in a nice table.

E se eu tentar do terminal, não funciona:

$ kill -L
bash: kill: L: invalid signal specification

Isso ocorre porque kill está sendo executado como um shell interno e não possui esse recurso / opção.

Então, Como executo o comando adequadamente para evitar interferência do shell?

Nota: Aqui, kill é usado apenas para dar um exemplo. Você pode ter dificuldades com outro (s) comando (s) com interferência do shell

    
por Pandya 28.01.2016 / 15:29

1 resposta

3

Você pode usar env your-command para evitar interferência do shell.

Exemplo:

$ env kill -L
 1 HUP      2 INT      3 QUIT     4 ILL      5 TRAP     6 ABRT     7 BUS
 8 FPE      9 KILL    10 USR1    11 SEGV    12 USR2    13 PIPE    14 ALRM
15 TERM    16 STKFLT  17 CHLD    18 CONT    19 STOP    20 TSTP    21 TTIN
22 TTOU    23 URG     24 XCPU    25 XFSZ    26 VTALRM  27 PROF    28 WINCH
29 POLL    30 PWR     31 SYS     

Outra forma é usar o caminho do comando da seguinte forma:

$ which kill
/bin/kill

$ /bin/kill -L
 1 HUP      2 INT      3 QUIT     4 ILL      5 TRAP     6 ABRT     7 BUS
 8 FPE      9 KILL    10 USR1    11 SEGV    12 USR2    13 PIPE    14 ALRM
15 TERM    16 STKFLT  17 CHLD    18 CONT    19 STOP    20 TSTP    21 TTIN
22 TTOU    23 URG     24 XCPU    25 XFSZ    26 VTALRM  27 PROF    28 WINCH
29 POLL    30 PWR     31 SYS    

Então, Usando env ou especificando o caminho / localização do comando, você pode evitar a interferência do shell.

    
por 28.01.2016 / 15:29