Redirecionamento de saída ambíguo

0

Estou tentando redirecionar stderr para stdout e, em seguida, para um arquivo em um script de inicialização, mas quando introduzo stderr para stdout, recebo o erro "Redirecionar saída ambígua". O stdout sozinho não resulta no erro e grava no arquivo de log onde afirmei. Eu tentei o seguinte

-jar /jbeaulau_test/microservices/config-server-0.0.2-RELEASE.jar &>/jbeaulau_test/microservices/log/all.log &

-jar /jbeaulau_test/microservices/config-server-0.0.2-RELEASE.jar >/jbeaulau_test/microservices/log/all.log 2>&1 &

Qualquer conselho seria apreciado.

    
por jbeaulau 23.01.2018 / 01:06

2 respostas

2

Se você estiver executando (t) csh, receberá Ambiguous output redirect. se tentar configurar dois redirecionamentos conflitantes:

> echo foo > a > b
Ambiguous output redirect.

No Bash, você pode receber um erro semelhante se usar um array com vários elementos no lugar do nome do arquivo:

$ set aa bb
$ echo foo > "$@"
bash: "$@": ambiguous redirect

Como mencionado em respostas ao redirecionamento do stderr não funcionando em csh , o operador >& trabalha em (t csh para redirecionar stdout e stderr. 2>&1 é a maneira padrão de redirecionar o stderr para o mesmo local que o stdout, mas (t) o csh não suporta isso. Em vez disso, é necessária a combinação > foo 2>&1 como um redirecionamento para foo , um argumento regular 2 e um redirecionamento para 1 , e os redirecionamentos entram em conflito, para que você receba o erro.

>& também funciona no Bash e no zsh, mas não é um recurso padrão.

    
por 23.01.2018 / 11:11
-1

A segunda entrada deve funcionar bem. O erro "redirecionamento ambíguo" às vezes acontece se você tiver espaços onde eles não deveriam estar ou, inversamente, quando um espaço importante estiver faltando.

Eu simplificaria seu comando para demonstrar:

echo "Test" >/tmp/x.txt 2>&1 &

A parte "> /tmp/x.txt" redirecionará a saída padrão (identificador de arquivo # 1). Um espaço entre o > e o nome do arquivo é permitido (embora neste contexto seja confuso), mas caso contrário não deve haver espaços aqui.

O 2 > & 1 redirecionará o stderr (identificador de arquivo 2) para qualquer que seja o identificador de arquivo 1 (que é stdout). Não deve haver espaços aqui também.

O & vai fundo sua tarefa. Isso deve ser compensado com um espaço do caractere precedente.

A reversão dos dois redirecionamentos não funciona (embora o eco seja uma escolha ruim aqui, pois não produz saída de stderr):

echo "This will not work" 2>&1 >/tmp/x.txt &

Isso significa:

2>&1

Redirecionar o identificador de arquivo 2 para onde o identificador de arquivo 1 vai (que, nesse ponto, ainda é o console)

>/tmp/x.txt

Redirecione o identificador de arquivo 1 para um arquivo - mas como o identificador de arquivo 2 (stderr) já está redirecionado, ele manterá seu destino e ainda irá para o console.

O primeiro comando que você escreveu é simplesmente um erro de sintaxe.

echo &>/tmp/x.txt

Atualização : @Wildcard apontou nos comentários que esta é uma sintaxe realmente válida.

    
por 23.01.2018 / 01:55