
Bash에서 다음과 같은 파일을 패치하려고 합니다.
cat << ''EOF | patch --dry-run
> --- urancid 2017-12-06 09:56:33.000000000 -0600 patch --dry-run
> +++ /tmp/urancid 2017-12-06 15:06:57.000000000 -0600
> @@ -393,7 +393,7 @@
> last if (/^$prompt/);
> next if (/-ac\.\s*/);
> next if (/-fs\.\s*/);
> - next if (/set date\s*/)
> + next if (/set date\s*/);
> next if (/^(\s*|\s*$cmd\s*)$/);
> if ( ! /^$prompt/) {
> if ( ! $skipprocess ) {
> EOF
하지만 내가 얻는 건
patching file urancid
Hunk #1 FAILED at 393.
1 out of 1 hunk FAILED -- saving rejects to file urancid.rej
가능할 것 같습니다. 제가 붙여넣은 패치 파일을 찾으면 작동할 것입니다.
여러 파일을 포함하지 않고도 패치 스크립트를 만들 수 있도록 이 작업을 수행하고 싶습니다.
지금까지 나는 "패치"가 무엇과 관련되어 있는지 잘 알지 못합니다. 공백 문제가 있는 것 같습니다.
답변1
패치를 적용할 수 있도록 예제의 공백을 수정하면 개념이 수용 가능하다는 것을 알 수 있습니다(비록 cat
그렇게 할 수 있기 때문에 필수는 아니지만 patch --dry-run <<'EOF'
).
반면 공백 정렬이 잘못된 패치가 있는 경우 이 --ignore-whitespace
매개변수를 사용하는 것이 좋습니다. (패치 매뉴얼 페이지에서 이를 찾을 수 있습니다. man patch
)
patch --dry-run --ignore-whitespace << 'EOF'
...
...
EOF