Одна из проблем с вашей первой командой заключается в том, что вы перенаправляете 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.