Como fazer com que o arquivo de redirecionamento tenha um pedido personalizado

1

Este é o meu teste .sh file.

errorandoutput.sh

#!/bin/bash

echo myecho
ls dflj

Se eu executar ./errorandoutput.sh >file 2>&1 , podemos obter esse file

Mas espero que as informações STDOUT sejam depois do STDERR .Então, altero o comando para

./errorandoutput.sh >file 1>&2

Mas recebo um file vazio. Como tornar as informações de STDOUT após o STDERR em um redirecionamento file ?

Quer dizer, espero ter um file como

ls: cannot access 'dflj': No such file or directory
myecho
    
por yode 10.07.2017 / 04:40

3 respostas

2

Não é assim que a ordem de redirecionamento funciona.

A ordem de redirecionamento apenas determina a ordem de ação que o shell faz com a descrição do arquivo, não com seu conteúdo.

Em:

./errorandoutput.sh >file 2>&1

Primeiro, o padrão de redirecionamento do shell para file e, em seguida, redireciona o erro padrão para o padrão, que agora é apontado para file , então o padrão e o erro padrão agora vão para file .

Neste estágio, o shell é feito com redirecionamento. Não tem nada a ver com o conteúdo do arquivo file .

A ordem do conteúdo em file é determinada pela ordem dos comandos que você executou dentro do script. Altere seu script para:

#!/bin/bash

ls dflj
echo myecho

e você teria o que queria.

    
por 10.07.2017 / 04:57
0

o ' > ' age como "1 ** > **"

Desta forma, deve funcionar

./errorandoutput.sh  2>file  1>&2



$ ( echo yay ; fhgfhgf ) > out 2>&1
$ cat out
yay
bash: fhgfhgf: command not found
$ ( echo yay ; fhgfhgf ) 2> out 1>&2
$ cat out
yay
bash: fhgfhgf: command not found
    
por 10.07.2017 / 04:49
0

Se for importante, envie a saída padrão para um arquivo e depois imprima-o depois. Isso, é claro, exigiria um script:

temp=/tmp/yc$$
yourcommand > ${temp}
cat ${temp} && rm -f ${temp}
    
por 11.07.2017 / 00:44