이 글은 예전 글의 확장판(?)이다.
위 방식의 문제점은, 매개변수(파일, 디렉토리등)를 주지 않고 단독으로 코드를 실행했을 때, 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
로 바꿔줬다.
이걸로 문제해결! (적어도 지금은..)