이와 같은 명령에 간단한 구문 오류가 있습니다. Unix/Linux 호스트에서 실행해야 합니다.
$ echo "first string $PATH" > out.lst
$ ECHO second string %PATH% > out.lst
첫 번째 줄은 성공하여 출력 파일을 채우고, 두 번째 줄은 실패하여 이전에 채워진 파일을 비웁니다.
파일을 덮어쓰도록 출력되는 일부 명령을 호출할 때 오류가 발생할 경우를 대비하여 파일 내용을 보존하는 방법을 찾으려고 합니다.
사용 사례는 약간 이상합니다. 저는 기본 운영 체제(아마도 Linux 또는 Windows)에서 명령을 호출하도록 설계된 Oracle SQL*Plus용 이식 가능한 SQL 스크립트를 작성하려고 합니다. 운영 체제를 감지할 수 없기 때문에 두 플랫폼 모두에 대해 명령을 호출하고 예외를 발생시키지 않음으로써 작동하도록 노력하고 있습니다.
Windows에서는 두 줄이 모두 성공하고 두 번째 줄이 첫 번째 줄을 덮어씁니다. Linux에서는 두 번째 줄이 실패하지만 파일 내용을 보존하고 싶습니다.
답변1
을 사용하면 >
실제 리디렉션이 발생하기 전에 파일이 항상 비워집니다. >>
를 사용하여 동일한 대상에 후속 리디렉션을 연결할 수 있습니다 .
답변2
Windows 및 Unix에서 스크립트를 실행하는 데는 다음과 같은 많은 트릭이 있습니다.이것스택오버플로우에 대한 질문입니다.
예: :
unix 명령의 시작 부분 에 a를 넣어 cmd.exe
건너뛰도록 하고 a #
를 끝에 넣어 unix 쉘이 추가 캐리지 리턴을 차단하지 않도록 합니다.
:; echo "unix path = $PATH" > out.lst; exit #
@echo off
echo windows path = %PATH% > out.lst
여러 줄이 필요한 경우 goto label .. : label
Unix 쪽의 여기 문서와 Windows 쪽의 문서를 결합해야 합니다.
:; true <<EOT
@echo off
echo windows path = %PATH% > file.txt
echo windows sux
goto skip
EOT
echo "linux path = $PATH" > file.txt #
echo linux sux #
: skip
<<EOT
이 줄의 마지막 줄이어야 하며 유닉스 섹션의 모든 줄은 줄 이나 파일 이름 끝에 가짜 내용이 추가되는 것을 #
방지하기 위해 a로 끝나야 합니다.^M