Negar código de saída sem usar recursos de shell

2

Existe algum comando padrão que negue o código de saída de outro comando fornecido como um argumento sem usar recursos do shell ou iniciar um shell?

Eu tenho um programa que faz algo com base no código de saída de uma chamada system() . Eu tenho outro programa que retorna seu status através do código de saída. Mas o programa que estou chamando retorna os resultados opostos do que eu quero. Eu posso simplesmente especificar algo como bash -c '....' , mas existe uma maneira mais fácil?

P.S. Sim, eu sei que provavelmente estou tentando otimizar algo que provavelmente não importa tanto assim. Mas principalmente eu estou curioso, já que unix parece ter um comando para quase tudo, porque eu não consigo encontrar um simples comando negate-the-exit-code.

    
por Zoredache 19.10.2012 / 21:30

2 respostas

2

Não está no conjunto de ferramentas padrão AFAIK. sh (e seu ! ) no conjunto de ferramentas padrão seria o mais próximo do que você deseja.

system("sh", "-c",  "! \"$0\" \"$@\"", "cmd", "arg1", "arg2"...)

Outras ferramentas que podem executar comandos não possuem esse recurso (find, env, xargs ...) ou chamam um shell (ed, awk ...) para executar um comando.

Os early unices tinham um comando "if", mas ele desapareceu com o shell Bourne que trouxe instruções de controle estendidas.

    
por 19.10.2012 / 21:47
-2

Tente isto:

[ ! '<yourFirtsCommand>' ]

Substitua <yourFirtsCommand> pelo seu comando. Eu recomendo que você use o tipo certo de citações!
para evitar problemas com [] você pode usar:

test ! '<yourFirtsCommand>'
    
por 19.10.2012 / 21:52

Tags