윈도우에서 multiple command를 한 줄에 처리하는 방법은 없을까요? 저는 윈도우에서 powershell을 주로 써서, 그것을 위주로 설명을 하도록 하겠습니다. 해당 쉘은 command들을 ;로 연결하는 방법이 있긴 합니다만, 1; 2는 1이 실패하던 성공하던 2를 실행합니다. &&이나 ||과 같은 것들을 지원하지 않아요. 

 


 먼저 현재 $PSversionTable을 보겠습니다. 그러면 현재 powershell의 버전이 나오는데요. 5.1임을 알 수 있어요. 저는 powershell을 5.1에서 7대로 올리려고 하는데요. 왜냐하면 버전 7부터 pipeline chain operator가 지원되기 때문입니다. 문서에 언급되고 있는 부분이에요.

 

 

 winget을 이용해서 설치해 보겠습니다. winget search powershell을 입력하시면 이와 관련된 패키지들을 모두 검색합니다.

 

 

 이 중, id가 Microsoft.PowerShell인 것을 설치해 보겠습니다. winget install --id Microsoft.Powershell --source winget을 하시면, 장치 id가 Microsoft.PowerShell인 패키지를 설치합니다.

 

 

 이제 powershell 7을 열어서 Version을 확인해 보겠습니다. 그러면 PSVersion이 7.2.7임을 알 수 있어요. 이제, pipeline chain 연산자를 써 보겠습니다. 먼저 1 && 2는 1이 성공하면 2를 연달아서 실행합니다.

 

 

 ls && cd Downloads를 봅시다. 그러면, 현재 위치에서 ls 명령어를 실행합니다.

 

 

 다음에, ls 명령어가 성공했기 때문에 Downloads로 이동했음을 알 수 있습니다. 물론 1; 2 이런 식으로 이을 수도 있습니다. 5.1 버전에서도 이것은 가능해요.

 

 그런데, 이 명령은 a라는 디렉토리로 이동하는 것이 실패해도, 후행 명령인 cd Downloads가 실행되었음을 알 수 있어요. 1; 2는 1이 실패하건 성공하건 2가 실행되는 특성을 가지고 있어요. 1 && 2와는 다른 특성을 가진다고 볼 수 있어요. 만약에, 1과 2가 항상 성공한다는 보장이 있을 때 명령어 여러 개를 실행하려면 1; 2를 써도 나쁜 선택은 아닙니다.

 

 그런데 1이 실패하면 2를 실행시킨다던지, 1이 실패하면 2를 실행을 안 시키는 pipeline chain operator (&&과 ||)를 지원하지 않습니다. 따라서, 7 버전으로 업데이트 하는 것을 추천드립니다.

 


 그러면, 업데이트 된 powershell 7 버전을 터미널 앱에서 기본 터미널로 설정해 봅시다.

 

 설정을 누르시면 왼쪽 앱에 시작이 있습니다. 이 탭을 눌러보겠습니다.

 

 

 그러면 기본 프로필이 있는데요. 드롭 다운에서 PowerShell을 선택해 주시면 됩니다.

 

 

 PowerShell 프로필을 보시면, 명령줄이 있는데요. 문서에 따르면 Programs Files의 PowerShell의 7에 깔린다고 되어 있습니다. 그렇기 때문에 명령줄에는 C:\Program Files\PowerShell\7 밑에 실행파일이 있게 됩니다.

 

 

 기본 프로필 설정을 마치고 다시 터미널 앱을 실행시켜 보면, 7.2.7 버전의 powershell이 디폴트로 실행됨을 알 수 있습니다.

 


 Pycharm이나 intellij에서는 업데이트 된 Powershell을 어떻게 default 터미널로 설정하면 될까요? 이 글에서 말하는 방법대로 하면 됩니다. 대신에 저 글은 git bash일 뿐입니다. 현재 제가 설정하고 싶은 터미널은 7버전의 powershell인데요. shell path만 다른 것입니다. shell path만 다르게 설정해 주면 됩니다.

 

 

 그리고 나서, 터미널을 눌러보면, 7.2.7 버전의 제가 원하는 것이 나왔음을 알 수 있습니다. 이제 || 명령어를 써 보겠습니다.

 

 

 ls가 성공했기 때문에, config로 이동되지 않았습니다.

 

 cd a || cd config를 입력해 보겠습니다. cd a가 실패했기 때문에, config로 이동하게 됩니다.