Megpróbálom átirányítani a stderr-t stdout-ra, majd ki egy fájlra egy init szkriptben, de amikor a stderr-t bevezetem az stdout-ba, a „kétértelmű kimenet átirányítás” hiba. Az Stdout önmagában nem eredményezi a hibát, és a naplófájlba ír, ahol kijelentettem. Kipróbáltam a következőket

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

Bármely tanácsot értékelni lehetne.

Megjegyzések

Válasz

Ha újra fut (t) csh, akkor kap Ambiguous output redirect. ha két ütköző átirányítást próbál beállítani:

> echo foo > a > b Ambiguous output redirect. 

A Bash-ban hasonló hibát kaphat, ha tömböt használ több elemmel a fájlnév helyett:

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

Amint azt a stderr átirányításra adott válaszok nem működnek csh , a >& operátor a (t) csh könyvtárban működik, hogy az stdout és a stderr is átirányítsa. A 2>&1 a stderr átirányításának ugyanazon a helyen, mint az stdout, de a (t) csh ezt nem támogatja. Ehelyett a átirányítás a foo címre, szabályos argumentum 2 és átirányítás a 1 és az átirányítások ütköznek, így kapja meg a hibát.

>& a Bash és a zsh fájlokban is működik, de ez nem a szokásos szolgáltatás.

Válasz

A második bejegyzésnek jól kell működnie. A “kétértelmű átirányítás” hiba néha akkor fordul elő, ha van szóköz, ahol nem kellene, vagy fordítva, ha hiányzik egy fontos szó.

Egyszerűsíteném a parancsot, hogy bemutassa:

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

A “> /tmp/x.txt” rész átirányítja az stdout fájlt (1. fájlkezelő). A> és a fájlnév között szabad egy szóköz (bár ebben az összefüggésben zavaró lenne), de különben itt nem lehet szóköz.

A 2> & 1 átirányítja a stderr fájlt (2. fájlkezelő) bármilyen fájlra. Az 1-es fogantyú megy (ami stdout). Itt sem lehet szóköz.

A & háttérképezi a feladatot. Ezt ellensúlyozni kell szóközzel az előző karakterből.

A két átirányítás megfordítása nem működik (bár az echo itt rossz választás, mivel nem hoz létre stderr kimenetet):

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

Ez azt jelenti:

2>&1 

A 2. fájlkezelő átirányítása a következőre: hová kerül az 1. fájlkezelő (amely ezen a ponton még mindig a konzol)

>/tmp/x.txt 

Átirányítja az 1. fájlkezelőt egy fájlra – de mivel a 2. fájlkezelő (stderr) ezen a ponton már át van irányítva, megtartja a rendeltetési helyét, és továbbra is a konzolhoz megy.

Az első parancs, amelyet írt, egyszerűen egy szintaktikai hiba.

echo &>/tmp/x.txt 

Frissítés : @Wildcard megjegyezte, hogy ez valóban érvényes szintaxis.

Megjegyzések

  • The ">/tmp/x.txt" part will redirect stdout (file handle #1). It must not contain any spaces.. Tartalmazhatja a helyet. command >out.txt == command > out.txt
  • igazad van; Ott hibáztam. Javítás.
  • " Az első parancs, amelyet írt, egyszerűen egy szintaktikai hiba. " Nem, ez ' nem; ' s az előnyben részesített Bash szintaxist az stdout és a stderr átirányításához egyaránt. Lásd: LESS='+/Redirecting Standard Output and Standard Error' man bash
  • @Wildcard – köszönöm. Soha nem hagyom abba a tanulást!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük