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.exe
replacements)를 두 번 눌러야 실행이 종료됩니다.[잘못된] 해결 방법은 바이너리를 수정하는 것입니다. 프롬프트를 억제하기 위해 실행 파일을 패치하는 방법에 대한 지침이 있는 문서를 참조하십시오.또한 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의 시작 지점은 [아래 섹션의 업데이트 참조]입니다. 즉, 배치 파일입니다.그것이 일반적으로 작동하는 방식입니다.npm
JS 파일 또는 셸 스크립트로 구현된 패키지 "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>.cmd
는 Windows용 도우미 배치 파일입니다.
업데이트 및 향후 고려 사항:
npm 모듈의 경우 PowerShell 스크립트를 사용하면 문제가 사라집니다.*.ps1
)는 Windows에서 도우미 스크립트로 사용되었습니다.입장권이 있습니다.npm
,yarn
그리고 이를 위한 유사한 소프트웨어.다음과 같은 단점도 있습니다.
*.ps1
PowerShell 외부에서 파일을 직접 실행할 수 없습니다. 특히,cmd.exe
파일 탐색기(그리고 이를 변경하는 것은 중요하지 않습니다).PowerShell이 아직 완전히 교체되지 않았습니다.
cmd.exe
윈도우 10 기준으로 기본 셸로 사용할 수 있습니다.
PowerShell에서 호출하면 파일이 발견되어 프로세스 중에 실행되므로 프로젝트에서 헬퍼 스크립트를 제공하는 것이 가능하며, 이는 다음보다 우선합니다.*.cmd
동명의 파일입니다.
- 업데이트:
- 최신 버전
npm
(6.14.10에서 확인) 실제로 다음을 설치해야 합니다.*.ps1
서류철 - 대체 패키지 관리자는 v2가 배치 파일을 더 이상 사용하지 않는 것 같기 때문에 원래 문제는 여기서 무시됩니다.(반면 v1은 배치 파일만 사용합니다. v1에서 업그레이드하려면 프로젝트별로 업그레이드해야 합니다. 마이그레이션 지침 참조).
- 최신 버전
다른 답변에서도 알 수 있듯이, 올바른 수정은 다음을 대체하는 것입니다.cmd
스크립트를 사용한ps1
버전들
그러나 하이퍼 셸 사용자가 해결할 수 있는 또 다른 방법은 'Hyperyes'인데, 이 플러그인은 프롬프트가 뜨면 자동으로 해당 플러그인이 표시됩니다.
그것을 피하는 가장 좋은 방법은 그것을 시작하지 않는 것입니다, 제 경우에는, 타이핑을 하지 않는 것입니다.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
'programing' 카테고리의 다른 글
배열에서 사전 증분 대 사후 증분 (0) | 2023.10.27 |
---|---|
첫째 아이로 요소를 삽입하는 방법은? (0) | 2023.10.27 |
Python+를 사용하여 MySQL 데이터베이스를 연결하는 방법원격으로 SQL Lchemy? (0) | 2023.10.27 |
내가 파워셸인지 cmd인지 어떻게 판단합니까? (0) | 2023.10.27 |
트래비스가 도커 컨테이너를 구축하는 동안 phpunit 테스트를 실행하려면 어떻게 해야 합니까? (0) | 2023.10.27 |