Força o código de retorno “ruim” (não 0) do comando do terminal?

5

Eu tenho um framework escrito em python, e para fins de teste eu basicamente quero fazer um subprocesso (também conhecido como shell call) ... que deve simplesmente voltar com um RC! = 0. Eu tentei invocar alguns não-existentes executável; ou para executar "exit 1"; mas esses são, por algum motivo, traduzidos para um FileNotFoundError.

Então, o que mais eu poderia fazer para disparar um código de retorno! = 0 (de uma maneira "confiável"; significando que o comando não deve retornar de repente 0 em um ponto futuro).

Eu pensei em "procurar" por um binário chamado exit, mas bem:

> /usr/bin/env exit
/usr/bin/env: exit: No such file or directory
    
por GhostCat 10.04.2015 / 15:07

3 respostas

12

Se você está procurando um comando system que sempre retorna um código de saída diferente de zero, então /bin/false parece que deve funcionar para você. De man false :

NAME
       false - do nothing, unsuccessfully

SYNOPSIS
       false [ignored command line arguments]
       false OPTION

DESCRIPTION
       Exit with a status code indicating failure.
    
por steeldriver 10.04.2015 / 15:58
4

Você pode criar um novo código de retorno com o comando bash -c "exit RETURNCODE" , substituindo "RETURNCODE" por qualquer número. Note que ele será cortado para um inteiro não assinado de 8 bits (0 ... 255) por (RETURNCODE mod 256)

Você pode verificar o código de retorno do último comando do shell dentro do terminal (!) executando echo $? . O "$?" variável contém o código de retorno mais recente e "echo" imprime na saída padrão.

    
por Byte Commander 10.04.2015 / 15:42
0

Depois de mais alguns testes, descobri que meu problema não estava no lado "Linux".

O Python possui um módulo shlex; que deve ser usado para "dividir" cadeias de comandos. Quando mudei minha chamada de subprocesso para usar a saída de shlex.split() , invocar "bash exit 1" me dá o que preciso.

    
por GhostCat 10.04.2015 / 15:25