(돌아가기) Atom/VS Code : 새로 파일을 열었을 때, 기존 파일들은 닫힌 상태가 되는 문제 #2.

이 글은 예전 글의 확장판(?)이다.

위 방식의 문제점은, 매개변수(파일, 디렉토리등)를 주지 않고 단독으로 코드를 실행했을 때, VS Code 창이 두개가 돼 버린다는데 있다.

이 문제를 해결하기 위해 다음과 같은 스크립트를 만들었다. run_vscode 라는 이름을 주고, 실행경로에 추가한다.

#!/bin/bash

# 매개변수가 없으면 그냥 VS Code 를 실행한다.
if [ -z "$1" ]
  then
  echo "매개변수 없어요"
  /usr/bin/code
  exit 0
fi

# 매개변수가 있으면(즉, $1 의 크기가 0보다 크면)
if [ -n "$1" ]
  then
  echo "매개변수 있어요"
# VS Code 가 실행 중이면 그냥 코드만 실행
# pgrep code 를 하면, 이 스크립트이름(run_vscode)에도 code 가 포함되어 있기 때문에 참이 반환된다.
# 정확한 구분을 위해 -P 1, 즉, 부모가 systemd 인 것을 택했다.
  pgrep -P 1 code && /usr/bin/code "$1" && echo "실행중" && exit 1
# VS Code 가 실행 중이지 않으면..
  /usr/bin/code && /usr/bin/code "$1" && echo "안실행중" && exit 2
fi

이렇게 하고, code.desktop 의 exec 행도 이렇게 바꾼다.

Exec=run_vscode "%F"

문제는 해결된 듯? 이를 위해서, run_vscode 는 반드시 실행경로에 들어가 있어야 한다.


# 참고!

pgrep 는 프로세스가 실행 중인지 확인해주는 프로그램이다. pgrep code 는 코드가 실행 중인지 확인하고, 참이면 PID 를 반환한다.

처음 코딩했을 때는 그냥 pgrep code 였다. 그런데, code 가 실행 중이지 않는데도 자꾸 참값이 반환되었다. 왜..???
이건, 이 스크립트 명(run_vscode) 때문이었다. 스크립트 이름에 code 가 포함되어 있으니 참이 반환될 수 밖에.

하여.. 실제 VS Code 의 프로세스를 찾아보니, 탭까지 포함해서 여러 개 프로세스가 뜨는데, 부모가 Systemd(PID 1) 인 메인 프로세스가 있었다. 따라서, 그것을 찾게끔, 즉 pgrep -P 1 code 로 바꿔줬다.

이걸로 문제해결! (적어도 지금은..)

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.