Git Bash에서 클립보드 파이프하기
Windows에서 Git Bash를 쓰면서 macOS의 pbcopy, pbpaste가 그리운 사람을 위한 글이다. .bashrc에 alias 두 줄만 넣으면 터미널 출력을 파이프로 클립보드에 넣고 꺼낼 수 있다.
TL;DR
# .bashrc
alias copy="clip"
alias paste="powershell.exe Get-Clipboard | sed '\$s/\\r\$//' | sed '\$s/\\n\$//'"
배경
맥북에서 즐겨 썼던 커맨드 중 pbcopy와 pbpaste가 있다. 표준 입력을 클립보드에 넣고, 클립보드 내용을 표준 출력으로 꺼내는 한 쌍의 명령이다.
특히나
pbcopy는|파이프를 통해 매우 요긴하게 사용했었다!
# input.txt의 내용을 클립보드로 저장
$ cat input.txt | pbcopy
# 클립보드 내용을 input.txt로 저장
$ pbpaste > input.txt
최근에 윈도우 개발환경으로 오면서 더 이상 pbcopy와 pbpaste 사용할 수 없게 되었다. 물론 Powershell의 Get-Clipboard, Set-Clipboard를 사용할 수 있지만, powershell이나 cmd를 사용하고 싶지는 않았다.
해결 방안
우선 Git Bash를 설치한다.
그리고 ~/.bashrc에 다음 alias를 추가하여준다.
alias copy="clip"
alias paste="powershell.exe Get-Clipboard | sed '\$s/\\r\$//' | sed '\$s/\\n\$//'"
Get-Clipboard는 출력 끝에 Windows식 줄바꿈(\r\n)을 붙이기 때문에sed로 마지막 줄의\r과\n을 떼어냈다.
그렇게되면 다음과 같이 클립보드를 git-bash에서 활용할 수 있다!
# 클립보드 복사한 내용을 base64 디코딩하여 다시 클립보드로 복사
$ paste | base64 -d | copy
# 국제 정거장 위치 정보를 불러와 json 형식으로 클립보드로 복사
$ curl http://api.open-notify.org/iss-now.json | jq '.iss-position' | copy
# 로그 파일의 경고 메시지만 클립보드로 복사
$ awk '/WARNING/ {print $0}' sample.log | copy
# json 파일을 minify하고 base64 한 줄로 인코딩하여 클립보드로 복사
$ jq -c '.' config.json | base64 -w0 | copy
위 예제의
jq는 JSON을 명령줄에서 골라내고 변형하는 도구다. Windows에서도 설치해두면 쓸 곳이 많다.