Одна из проблем с вашей первой командой заключается в том, что вы перенаправляете 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 и перемещает его в файл.
С другой стороны, он перемещает стандартный вывод на 1008, а затем перемещает стандартный вывод на точку, на которую указывает стандартный вывод, также на 1008. Таким образом, оба могут указывать на один файл.
2>$1
вероятно, должно быть2>&1
.