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!
echo &> foo
problémát. (2) Ne adjon aszinkron példaparancsokat, ha nem muszáj. (3) Tudjon meg többet a héjakról. A Unixverse-ben több héj van, és különböző parancsszintaxisokat fogadnak el. Tudja meg, hogyan tudja megmondani, hogy milyen héjat használ.