/dev/stdout
— это специальный файл.
Допустим, я вошел в систему с двумя пользователями (user1 на tty1 и user2 на tty2 ).
/dev/stdout
для пользователя 1 относится к /dev/tty1
, а для пользователя два относится к /dev/tty2
.
Здесь http
пользователь пытается записать что-то в /dev/stdout
, принадлежащее текущему пользователю (root):
bash-4.4# su - http -c "echo 1 >> /dev/stdout"
-sh: can't create /dev/stdout: Permission denied
В другом случае http
пишет в файл, которым он владеет.
Если вы выполните patch(1)
, фрагменты, которые не подходят, будут сохранены в файле отклонения. Затем вы можете перейти к этому и применить (или нет )фрагменты, которые не попали.
Другая возможность (для хардкорных спортсменов )— просто отредактировать патч. Обратите внимание, что формат diff(1)
предназначен для удобства чтения, а , а не — для редактирования. Вы должны быть осторожны, чтобы не перепутать номера строк или другие маркеры.
Если вы хотите создать патч для распространения, возможно, самый простой способ — просто применить патч как есть, отредактировать полученный файл по вкусу, а затем повторить патч для отредактированного файла.
Предполагая, что вы используете GNU diff
, невозможно заставить его сгенерировать именно тот патч, который вам нужен. Можно попросить diff
игнорировать строки, соответствующие данному регулярному выражению, с опцией -I
, но будут игнорироваться только целые куски, состоящие только из таких изменений. В этом случае любой ханк (даже без контекста )изменит строки «Банан» и «Клементины».
Одна из возможностей, не требующая сложного редактирования патчей, — это попросить diff
сгенерировать ed
сценарий :
diff -e
Это даст
2,3c
Blueberries
Cherries
.
, который можно адаптировать для создания патча, который вам нужен:
3,3c
Cherries
.