728x90
요새 특강 때문에 PS를 반복으로 하고 있다. PS용으로는 Eclipse와 IntelliJ는 좀 무거운 느낌이라서 VScode로 진행 중이다.
근데 이게 계속 하다보니 번거롭고 귀찮다. 그런데 또 나는 개발자다. 그러하니 자동화하자.
VScode는 .vscode/launch.json 에서 실행/디버깅 설정을 관리한다. 문제를 풀기 위한 기본 폴더 + input.txt를 만들어주면서 동시에 해당 경로로 실행 설정을 가장 top으로 잡아주는 걸로 구현
Repository (폴더 구조)
GitHub - TomAlgorismus/snippet: 코드 조각
코드 조각. Contribute to TomAlgorismus/snippet development by creating an account on GitHub.
github.com
sample.txt
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sc.close();
}
}
boj.sh
# 문제 번호 INPUT
echo "백준 문제 번호: "
read problem_number
echo "백준 문제 번호 확인: $problem_number"
problem_name="boj$problem_number"
# 폴더 생성
full_path="$problem_name/src/$problem_name"
echo "폴더 생성 : $full_path"
mkdir -p -v $full_path
# 메인 파일 생성
echo "메인 파일 생성 : $full_path/Main.java"
echo "package $problem_name;" > $full_path/Main.java
echo "// https://www.acmicpc.net/problem/$problem_number" >> $full_path/Main.java
i=1
while read line || [ -n "$line" ] ; do
echo $line >> $full_path/Main.java
((i+=1))
done < sample.txt
# 입력 파일 생성
echo "입력 파일 생성 : $full_path/input.txt"
touch $full_path/input.txt
# vscode 설정
echo "vscode launch.json 설정"
sed -i '' "3a\\
{\"type\": \"java\",\\
\"name\": \"$problem_name\",\\
\"request\": \"launch\",\\
\"mainClass\": \"$problem_name.Main\",\\
\"args\": [\"<\",\"$full_path/input.txt\"]},"\
.vscode/launch.json
# 완료
echo "생성 완료"
- 문제 번호 입력 및 출력
- echo "백준 문제 번호: ": 사용자에게 백준 문제 번호를 입력하라는 메시지를 출력
- read problem_number: 사용자로부터 입력받은 값을 problem_number 변수에 저장
- echo "백준 문제 번호 확인: $problem_number": 입력받은 문제 번호를 화면에 출력하여 확인
- 폴더 생성
- problem_name="boj$problem_number": problem_number에 입력받은 문제 번호를 이용해 problem_name 변수를 설정
- full_path="$problem_name/src/$problem_name": Java 소스 코드를 저장할 경로를 full_path 변수에 설정
- mkdir -p -v $full_path: -p 옵션은 중간에 없는 디렉토리도 함께 생성하고, -v 옵션은 생성 과정을 화면에 보여줌
- 메인 파일 생성 : Main.java 파일에 패키지 선언과 문제 링크 주석을 추가
- echo "package $problem_name;" > $full_path/Main.java: Main.java 파일을 생성하고, 파일의 첫 줄에 패키지 선언을 추가.
- echo "// https://www.acmicpc.net/problem/$problem_number" >> $full_path/Main.java: 기존에 존재하던 내용 다음 줄에 백준 문제 링크를 주석으로 추가.
- while read line || [ -n "$line" ]; do ... done < sample.txt: sample.txt 파일에서 한 줄씩 읽어 Main.java에 추가합니다. 빈 줄이 있어도 무시하지 않음.
- 입력 파일 생성
- touch $full_path/input.txt: 테스트 입력을 위한 input.txt 파일을 생성
- VSCode 설정 : VSCode의 디버깅 구성에 Java 프로그램 실행을 위한 설정을 추가
- sed -i '' "3a\\... .vscode/launch.json: sed 명령어를 사용해 .vscode/launch.json 파일을 수정
- sed 명령어는 스트림 편집기로, 텍스트 파일의 내용을 편집하는 데. 사용.
- sed 명령어의 기본 구조는 sed [옵션] '명령어' 파일명
- -i 옵션
- 'in-place'의 약어로, 파일을 직접 수정하도록 지시합니다. 즉, sed가 표준 출력으로 결과를 보내는 대신 파일 내용을 직접 변경합니다.
- macOS나 BSD 계열의 UNIX에서는 -i 옵션 뒤에 백업 확장자를 지정해야 할 수도 있습니다. 예를 들어, -i '' (빈 문자열)은 백업 파일을 생성하지 않고 파일을 직접 수정합니다.
- 명령어 부분
- sed의 명령어 부분은 다양한 편집 작업을 수행할 수 있는 스크립트. 여기에서는 3a\ 명령어를 사용.
- 3a\는 '3번째 줄 뒤에 추가(append)'하는 명령입니다. 즉, 파일의 세 번째 줄 다음에 새로운 내용을 추가하라는 의미입니다.
- 이어지는 내용({\"type\": \"java\", ... \"<\",\"$full_path/input.txt\"]},)은 추가할 텍스트.
- 파일명
- .vscode/launch.json은 편집할 파일의 이름. 여기서는 VSCode의 디버깅 설정 파일.
- 요약하자면, sed -i '' "3a\\... .vscode/launch.json 명령어는 .vscode/launch.json 파일을 직접 수정하여, 파일의 세 번째 줄 다음에 새로운 내용을 추가하는 것을 의미
- 완료 메시지 출력
- echo "생성 완료": 스크립트의 모든 과정이 완료되었음을 알리는 메시지를 출력
'Today_I_Learned' 카테고리의 다른 글
펀드기준가격 스크레이핑을 위한 AWS 람다 함수(Node) (0) | 2024.08.13 |
---|---|
Playwright로 Colab에서 연합뉴스 크롤링하기 (1) | 2023.12.21 |
[Django DRF] Serializer에서 id를 사용한 M:N 관계 (0) | 2023.11.13 |
AWS API Gateway로 DynamoDB PutItem 메서드 구현 (23.10.13) (1) | 2023.10.14 |
multiprocessing를 통한 병렬 처리 파이썬 코드 예제 (0) | 2023.09.30 |