Перенаправление и затем перемещение целевого файла - PullRequest
2 голосов
/ 04 апреля 2020

Я протестировал следующее в AIX, и оно работает.

logfile=log.txt
echo "Hello" > "$logfile"
exec 1>>"$logfile"
mv "$logfile" "${logfile}_new"
echo "World"

После запуска этого скрипта файл log.txt_new будет содержать:

Hello
World

Я не ожидал, что он будет работать потому что я переименовал файл туда, куда stdout был перенаправлен. Почему это работает?

Это также работает, если я mv / переименую каталог, содержащий файл журнала.

Ответ: https://unix.stackexchange.com/questions/7707/how-do-open-files-behave-on-linux-systems

1 Ответ

0 голосов
/ 04 апреля 2020

Путаница возникает из-за команды mv.

В этом случае mv на самом деле не move файл, а просто дает ему новое имя.

содержимое файла остается неизменным, и это все еще место назначения стандартного вывода вашей текущей оболочки.

Вот почему команда echo все еще выводит в исходный файл.

...