Одна з проблем вашої першої команди полягає в тому, що ви переспрямовуєте stderr туди, де знаходиться stdout (якщо ви змінили $ на a & як запропоновано в коментарі), а потім перенаправляєте stdout в якийсь файл журналу, але це не тягнеться за перенаправленим stderr . Ви повинні зробити це в іншому порядку, спочатку надішліть stdout туди, куди ви хочете, щоб перейти, а потім надішліть stderr на адресу stdout за адресою
some_cmd > some_file 2>&1 &
і тоді ви можете кинути & на, щоб надіслати його на другий план. До роботи можна отримати jobs
команду. jobs
покаже вам запущені завдання та пронумерує їх. Потім ви можете поговорити про завдання, використовуючи%, а потім число kill %1
чи так.
Крім того, без & в кінці ви можете призупинити команду Ctrlz, використовуйте bg
команду, щоб поставити її fg
на другий план і повернути її на перший план. У поєднанні з jobs
командою це потужно.
щоб уточнити вищевказану частину про порядок написання команд. Припустимо, stderr - це адреса 1002, stdout - адреса 1001, а файл - 1008. Команда зчитується зліва направо, тому перше, що вона бачить у вашому, - це те, 2>&1
що переміщується stderr до адреси 1001, потім воно бачить, > file
який переміщує stdout до 1008, але зберігає stderr на 1001. Він не тягне все, що вказує на 1001, і переміщує його на 1008, а просто посилає stdout і переміщує його у файл.
І навпаки, він переміщує stdout до 1008, а потім переміщує stderr до точки, на яку stdout вказує, також 1008. Таким чином обидва можуть вказувати на один файл.
2>$1
певно, мабуть2>&1
.