Notepad++ NppExec: '>'를 사용하여 파일로 리디렉션하면 인수로 등록되고 명령줄에서는 작동하지만 작동하지 않습니다.

Notepad++ NppExec: '>'를 사용하여 파일로 리디렉션하면 인수로 등록되고 명령줄에서는 작동하지만 작동하지 않습니다.

아래 코드를 보면 단순히 ac 또는 C++ 파일을 main.cpp전처리 후의 상태로 변환합니다(예 main_pp.cpp: .

그러나 생성된 명령을 실행하면 g++ -E "main.cpp" > "main_pp.cpp"명령줄에서 제대로 작동합니다.

정확한 오류는 이므로 이 인수 목록의 일부가 아니라는 g++: error: >: Invalid argument것을 알 수 없는 것 같습니다 .>

cd "$(CURRENT_DIRECTORY)"
g++ -E "$(FILE_NAME)" > "$(NAME_PART)_pp$(EXT_PART)"

표준 명령줄과 비교하여 NppExec의 동작이 왜 다른지 아는 사람이 있습니까?

답변1

출력 리디렉션 >및 파이프 연결은 |명령줄 해석기가 담당하는 것입니다. Windows에서는 cmd.exe명령줄 해석기입니다. 그래서 대신에

g++ -E "$(FILE_NAME)" > "$(NAME_PART)_pp$(EXT_PART)"

이것을 사용하십시오 :

cmd /C g++ -E "$(FILE_NAME)" > "$(NAME_PART)_pp$(EXT_PART)"

답변2

짧은 대답은 명령줄 인터프리터가 다른 프로그램을 실행하는 것보다 더 많은 일을 한다는 것입니다. 명령줄 인터프리터가 제공하는 기능을 사용하여 프로그램의 출력을 리디렉션하거나 >출력을 파이프하는 것과 같은 작업은 |NppExec에서 이를 시뮬레이션해야 한다는 것입니다. 일하라고 명령합니다.

더 정확한 대답은 일반적으로 다음을 사용하여 Windows에서 새 프로세스를 시작한다는 것입니다.CreateProcess()및 관련 기능이 있으며 새 프로세스의 출력을 리디렉션할 수 있지만 를 사용하는 것만큼 간단하지는 않습니다 >. 당신은손잡이를 열다파일에 추가하여 전달합니다.STARTUPINFOA적절한 플래그를 사용합니다.

따라서 리디렉션을 지원하려면 >NppExec는 해당 부분을 응용 프로그램 및 매개 변수에서 분리하기 위해 라인을 구문 분석해야 하며 이는 까다로울 수 있으며 다음과 같은 파일이 아닌 다른 항목으로 리디렉션할 수 있다는 점을 고려해야 합니다. 프린터.

불가능하지는 않으며 NppExec는 cd명령줄 해석기에서도 제공되는 예제를 사용하기 때문에 몇 가지 기본적인 구문 분석을 수행하는 것 같습니다. 그러나 이것은 줄의 공백이 아닌 처음 두 문자가 "cd"인지 확인한 다음 나머지 줄을 사용하여 변경하는 것만큼 간단할 수 있습니다.현재 디렉토리.

또한 NppExec이 응용 프로그램을 매개 변수와 분리하기 위해 행을 구문 분석하지도 않는 것으로 의심됩니다. 내 생각에는 변수를 대체하고 응용 프로그램 매개변수를 생략할 수 있다는 사실을 활용하므로 CreateProcess()전체 줄을 명령줄 매개변수로 전달할 수 있습니다(적어도 제가 할 일은 그렇게 합니다 :-).

마지막으로 결과를 파일로 리디렉션하거나 다른 프로그램으로 파이프할 것을 기대하는 표준 출력으로 결과를 출력하는 프로그램은 Unix/Linux에서 더 일반적입니다(g++는 원래 Unix용으로 만들어진 GNU의 일부인 것 같습니다). Windows에서는 매개변수를 사용하여 출력 파일을 지정하는 것이 더 일반적이므로 "Linux 스타일" 프로그램을 사용하지 않는 경우 리디렉션 지원이 최우선 순위로 생각되거나 아예 고려되지 않습니다.

관련 정보