Jednym z problemów z pierwszym poleceniem jest przekierowanie stderr do miejsca, w którym znajduje się stdout (jeśli zmieniłeś $ na a & zgodnie z sugestią w komentarzu), a następnie przekierowałeś stdout do jakiegoś pliku dziennika, ale to nie pociąga za sobą przekierowanego stderr . Musisz to zrobić w innej kolejności, najpierw wyślij stdout tam, gdzie chcesz, a następnie wyślij stderr na adres stdout pod adresem
some_cmd > some_file 2>&1 &
a następnie możesz włączyć i włączyć, aby wysłać go w tło. Do zadań można uzyskać dostęp za pomocą jobs
polecenia. jobs
pokaże bieżące zadania i numeruje je. Następnie możesz porozmawiać o zadaniach, używając%, a następnie liczby kill %1
lub więcej.
Ponadto bez znaku & na końcu możesz zawiesić polecenie za Ctrlzpomocą bg
polecenia, aby umieścić je w tle i fg
przenieść z powrotem na pierwszy plan. W połączeniu z jobs
poleceniem jest to potężne.
aby wyjaśnić powyższą część dotyczącą kolejności pisania poleceń. Załóżmy, że stderr to adres 1002, stdout to adres 1001, a plik to 1008. Polecenie czyta od lewej do prawej, więc pierwszą rzeczą, którą widzi w twoim, jest 2>&1
przesunięcie stderr na adres 1001, a następnie sprawdzenie, > file
który ruch stdout do 1008, ale utrzymuje stderr na 1001. Nie wyciąga wszystkiego wskazującego na 1001 i nie przenosi go do 1008, ale po prostu odwołuje się do stdout i przenosi go do pliku.
Odwrotnie, przesuwa stdout na 1008, a następnie przesuwa stderr do punktu, na który wskazuje stdout, 1008. W ten sposób oba mogą wskazywać na pojedynczy plik.
2>$1
prawdopodobnie ma być2>&1
.