Yritän ohjata stderr: n stdoutiin ja sitten ulos tiedostoon init-komentosarjassa, mutta kun otan stderr: n käyttöön stdoutissa, saan ”Epäselvä ulostulon uudelleenohjaus” -virhe. Stdout yksinään ei aiheuta virhettä ja kirjoittaa lokitiedostoon missä totesin. Olen kokeillut seuraavia

-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 & 

Kaikki neuvot olisivat tervetulleita.

Kommentit

Vastaa

Jos olet käynnissä (t) csh, saat Ambiguous output redirect. jos yrität määrittää kaksi ristiriitaista uudelleenohjausta:

> echo foo > a > b Ambiguous output redirect. 

Bashissa saatat saada samanlaisen virheen, jos käytät matriisia jossa on useita elementtejä tiedostonimen sijasta:

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

Kuten on mainittu vastauksissa stderr-uudelleenohjaukseen ei toimi csh , >& -operaattori toimii (t) csh -ohjelmassa ohjaamaan sekä stdout että stderr. 2>&1 on tavallinen tapa ohjata stderr samaan paikkaan kuin stdout, mutta (t) csh ”ei tue sitä. Sen sijaan se vie yhdistelmän > foo 2>&1 uudelleenohjauksena osoitteeseen foo, säännöllisenä argumenttina 2 ja uudelleenohjauksena osoitteeseen 1 ja uudelleenohjaukset ovat ristiriidassa, joten saat virheen.

>& toimii myös Bashissa ja zsh: ssä, mutta ei vakio-ominaisuus.

Vastaus

Toisen merkinnän pitäisi toimia hyvin. ”Epäselvä uudelleenohjaus” -virhe tapahtuu joskus, jos sinulla on joko välilyöntejä, joissa niiden ei pitäisi olla, tai päinvastoin, kun tärkeä tila puuttuu.

Yksinkertaistan komentoasi osoittamaan:

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

”> /tmp/x.txt” osa ohjaa stdoutin (tiedoston kahva # 1). Väli> ja tiedostonimen välillä on sallittu (vaikka tässä yhteydessä olisi hämmentävää), mutta muuten täällä ei pitäisi olla välilyöntejä.

2> & 1 ohjaa stderrin (tiedoston kahva 2) mihin tahansa tiedostoon kahva 1 menee (mikä on stdout). Myöskään tässä ei saa olla välilyöntejä.

& taustoittaa tehtävän. Tämä on korvattava välilyönnillä edellisestä merkistä.

Kahden uudelleenohjauksen kääntäminen ei toimi (vaikka kaiku onkin tässä huono valinta, koska se ei tuota stderr-ulostuloa):

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

Tämä tarkoittaa:

2>&1 

Ohjaa tiedoston kahva 2 mihin tiedostokahva 1 menee (joka tässä vaiheessa on edelleen konsoli)

>/tmp/x.txt 

Ohjaa tiedostokahva 1 tiedostoon – mutta koska tiedostokahva 2 (stderr) on jo uudelleenohjattu tässä vaiheessa, se säilyttää määränpäänsä ja menee edelleen konsoliin.

Ensimmäinen kirjoittamasi komento on yksinkertaisesti syntaksivirhe.

echo &>/tmp/x.txt 

Päivitys : @Wildcard huomautti kommenteissa, että tämä on todellakin kelvollinen syntakse.

Kommentit

  • The ">/tmp/x.txt" part will redirect stdout (file handle #1). It must not contain any spaces.. Se voi sisältää tilaa. command >out.txt == command > out.txt
  • Olet oikeassa; Tein virheen siellä. Korjaus.
  • " Ensimmäinen kirjoittamasi komento on yksinkertaisesti syntaksivirhe. " Ei, se ' ei; se ' s ensisijainen Bash-syntakse sekä stdoutin että stderrin uudelleenohjaamiseksi. Katso LESS='+/Redirecting Standard Output and Standard Error' man bash
  • @Wildcard – kiitos. En koskaan lopeta oppimista!

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *