programing

PowerShell에서 "배치 작업 종료(Y/N)" 확인을 억제하려면 어떻게 해야 합니까?

telecom 2023. 10. 27. 21:44
반응형

PowerShell에서 "배치 작업 종료(Y/N)" 확인을 억제하려면 어떻게 해야 합니까?

PowerShell에서 +C를 누르면 다음과 같은 메시지가 나타납니다.

배치 작업 종료(Y/N)?

Windows PowerShell을 제외하고는 https://superuser.com/questions/35698/how-to-supress-terminate-batch-job-y-n-confirmation, 과 유사합니다.

PowerShell은 배치 작업에 대해 CMD가 수행하는 것보다 더 많은 제어 기능을 제공합니까?

tl;dr

  • 문제의 원인은 (및 이 메시지를 보여주는 다른 명령어) 실제로 배치 파일(, )*.cmd이며 동작은 배치 파일의 인터프리터인 에 내장되어 있기 때문입니다.

  • 패키지 관리자는 PowerShell 스크립트를 점점 더 많이 제공하고 있습니다(*.ps1(아래 섹션 참조). PowerShell에서 실행할 때 문제를 우회합니다.


동작은 PowerShell에 의해 발생하지도 않고 PowerShell이 이를 변경할 수도 없습니다(PowerShell 소스 코드 레포에 프롬프트 메시지가 포함되어 있지 않음).

동작은 기본적으로 내장되어 있습니다. 이 경우 파워셸은 다음과 같이 부릅니다..cmd파일(batch 파일), 이는 다음과 같습니다.cmd.exe.

  • 대상 실행 파일의 호출을 명시적으로 제어하는 경우 Powershell로 이동하여 이 문제를 해결할 수 있습니다. 여기에는 고유한 고려 사항이 있습니다. 아래를 참조하십시오.

  • 대상 실행 파일의 호출을 명시적으로 제어하지 않으면 운이 없습니다(제3자를 설치할 의향이 없는 한).cmd.exereplacements)를 두 번 눌러야 실행이 종료됩니다.

  • [잘못된] 해결 방법바이너리수정하는 입니다. 프롬프트를 억제하기 위해 실행 파일을 패치하는 방법에 대한 지침이 있는 문서를 참조하십시오.또한 GitHub에 기능 요청을 게시하여 소스에서 이 동작을 수정할 것을 요청할 수 있지만 하위 호환성 때문에 발생할 가능성은 없습니다.

동작을 시연하는 방법:

예제에서는 Node.js가 설치되어 있고node.exe따라서 다음과 같이 경로에 있습니다.

먼저 호출합니다.node.exe프로세스를 종료하려면 를 눌러야 하는 엄격한 루프와 함께 직접적으로.

PS> node -e "while (true);"

보시다시피, 를 누르면 프로세스가 즉시 종료됩니다. 확인 프롬프트는 표시되지 않습니다.

이제 동일한 명령어를 호출하는 샘플 배치 파일을 생성하고 해당 배치 파일을 호출합니다.

PS> "@echo off`nnode -e `"while (true);`"" | Set-Content test.cmd
PS> ./test.cmd

보시다시피, 지금 누르면 원하지 않는 것이 나타납니다.Terminate batch job (Y/N)?신속한.(배치 파일을 실행하면 동일한 동작이 발생합니다.cmd.exe.)

그것을 증명하기 위해서는gulp.cmd 파일:h)일:

의 CLI를 통해 명령을 실행하고 있다고 말합니다.

Windows에서 CLI의 시작 지점은 [아래 섹션의 업데이트 참조]입니다. 즉, 배치 파일입니다.그것이 일반적으로 작동하는 방식입니다.npmJS 파일 또는 셸 스크립트로 구현된 패키지 "binary" (실행 파일).

.gulp불러들이는gulp.cmd다음과 같이 확인할 수 있습니다.

# Execute from a project folder that has `gulp` installed as a dependency.
# If `gulp` is installed *globally* 
# Note: CLI `npx` requires npm version 5.2.0+
PS C:\some\NodeJs\project> npx where gulp

다음과 같은 것이 나타납니다.

C:\some\NodeJs\project\node_modules\.bin\gulp
C:\some\NodeJs\project\node_modules\.bin\gulp.cmd

:where.exe 에는 확장 기능이 없는 Unix-shell 스크립트도 나와 있습니다....\gulp; 그러나 부터cmd.exe/ 파워셸 그러한 셸 스크립트는 직접 실행할 수 없으며,...\gulp.cmd- 실행되는 배치 파일입니다.
(의심스러운 경우 다음과 같은 명령을 내립니다.@set /p dummy="Press a key"시작할 때에gulp.cmd파일을 호출하면 이 명령이 실행됩니다.gulp의 기능하지 않고.cmd내선
또한 없음을 유의하십시오. gulp.exe.)

일반적으로 Windows(윈도우)에서는 프로젝트의node_modules\.bin하위 폴더에는 프로젝트가 로컬로 종속되는 패키지와 함께 제공되는 CLI의 CLI 진입점 이 들어 있습니다.

  • node_modules\.bin\<some-cli>는 유닉스 셸 스크립트입니다(인터프리터 실행은 해당 shebang 라인을 통해 제어됨).
  • node_modules\.bin\<some-cli>.cmdWindows용 도우미 배치 파일입니다.

업데이트 및 향후 고려 사항:

npm 모듈의 경우 PowerShell 스크립트를 사용하면 문제가 사라집니다.*.ps1)는 Windows에서 도우미 스크립트로 사용되었습니다.입장권이 있습니다.npm,yarn그리고 이를 위한 유사한 소프트웨어.다음과 같은 단점도 있습니다.

  • *.ps1PowerShell 외부에서 파일을 직접 실행할 수 없습니다. 특히,cmd.exe파일 탐색기(그리고 이를 변경하는 것은 중요하지 않습니다).

  • PowerShell이 아직 완전히 교체되지 않았습니다.cmd.exe윈도우 10 기준으로 기본 셸로 사용할 수 있습니다.

PowerShell에서 호출하면 파일이 발견되어 프로세스 중에 실행되므로 프로젝트에서 헬퍼 스크립트를 제공하는 것이 가능하며, 이는 다음보다 우선합니다.*.cmd동명의 파일입니다.

  • 업데이트:
    • 최신 버전npm(6.14.10에서 확인) 실제로 다음을 설치해야 합니다.*.ps1서류철
    • 대체 패키지 관리자는 v2가 배치 파일을 더 이상 사용하지 않는같기 때문에 원래 문제는 여기무시됩니다.(반면 v1은 배치 파일만 사용합니다. v1에서 업그레이드하려면 프로젝트별로 업그레이드해야 합니다. 마이그레이션 지침 참조).

다른 답변에서도 알 수 있듯이, 올바른 수정은 다음을 대체하는 것입니다.cmd스크립트를 사용한ps1버전들

그러나 하이퍼 셸 사용자가 해결할 수 있는 또 다른 방법은 'Hyperyes'인데, 이 플러그인은 프롬프트가 뜨면 자동으로 해당 플러그인이 표시됩니다.

enter image description here

그것을 피하는 가장 좋은 방법은 그것을 시작하지 않는 것입니다, 제 경우에는, 타이핑을 하지 않는 것입니다.npm run devStart대신 타자를 칩니다.nodemon ./server.js localhost 3000 이렇게 보이는군요.

배치 작업 종료(Y/N) 후 Ctr-c를 다시 누릅니다.

13년 전까지만 해도 이것은 https://superuser.com/questions/35698/how-to-supress-terminate-batch-job-y-n-confirmation 에서 세 번째로 좋은 답변이었습니다. (왜 세 번째입니까?)

(이 짜증나는 메세지를 없애려다 다시 찾은것 뿐입니다)

@echo off
start /w "" "C:\myfile.bat" 2>nul|findstr /i "termin"

if errorlevel 1 goto bypass


:bypass

echo hello

timeout /t 5 >nul

언급URL : https://stackoverflow.com/questions/39085380/how-can-i-suppress-terminate-batch-job-y-n-confirmation-in-powershell

반응형