# Ask GN: 자주 사용하는 셸 스니펫이 있으신가요?

> Clean Markdown view of GeekNews topic #20421. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20421](https://news.hada.io/topic?id=20421)
- GeekNews Markdown: [https://news.hada.io/topic/20421.md](https://news.hada.io/topic/20421.md)
- Type: ask
- Author: [winterjung](https://news.hada.io/@winterjung)
- Published: 2025-04-19T13:43:42+09:00
- Updated: 2025-04-19T13:43:42+09:00
- Points: 15
- Comments: 6

## Summary

작성자는 **셸 스크립트**를 `~/.zshrc`에 추가하거나 **alias**로 사용한다고 합니다. 첫 번째 스니펫은 **man 페이지를 PDF로 변환**하여 보는 방법이며, 두 번째는 **git remote에서 삭제된 브랜치를 제거**하는 방법입니다. 세 번째 스니펫은 `.env` 파일의 **환경변수를 적용**하는 방법이고, 네 번째는 **로컬에서 MySQL을 잠시 사용하는** 방법입니다. 각 스니펫은 사용자의 편의를 위해 작성되었으며, 다른 사용자들의 스니펫도 궁금하다고 합니다.

## Topic Body

저는 아래 셸 스크립트나 snippet을 `~/.zshrc`에 넣어두거나 alias걸어 사용하곤 하는데, 다른 분들은 어떤 스니펫을 사용하시는지 궁금해 올려봅니다.  
  
아래 내용은 [개인 블로그: 자주 사용하는 셸 스니펫](https://www.winterjung.dev/fc8307/)에도 적어두었는데 굳이 들어가서 보실 필요 없이 내용 전부를 붙여 넣었습니다.  
  
---  
  
#### 1. man 페이지를 pdf로 보기  
  
```bash  
pman() {  
  mandoc -Tpdf "$(man -w $@)" | open -f -a Preview  
}  
```  
  
mac os 기준 `$ pman curl`처럼 사용합니다.  
  
#### 2. git remote에서 삭제된 브랜치 삭제  
  
```bash  
git fetch -p && for branch in $(git branch -vv | grep ': gone]' | awk '{print $1}'); do git branch -D $branch; done  
```  
  
혹은 [git gone - 원격에서 삭제된 브랜치를 모두 삭제하는 커스텀 명령어](https://news.hada.io/topic?id=7933) 사용도 가능해 보입니다.  
  
#### 3. `.env`에 있는 환경변수 적용  
  
```bash  
export $(grep -v '^#' .env | xargs)  
```  
  
[direnv](https://direnv.net/)를 쓰는게 더 좋긴 할텐데 습관이라 그런지 위 스니펫을 더 많이 사용하곤 합니다.  
  
#### 4. 로컬에서 mysql이 잠시 필요할 때  
  
```bash  
docker run --rm -d --name mysql \  
  -e MYSQL_ROOT_PASSWORD=password \  
  -e MYSQL_ROOT_HOST=% \  
  -p 3306:3306 \  
  -v $(pwd)/mysql_data:/var/lib/mysql \  
  mysql:8 \  
  --character-set-server=utf8mb4 \  
  --explicit_defaults_for_timestamp=true  
```  
  
이후 `localhost:3306`으로 접속해 사용하며 볼륨 유지가 필요하지 않다면 `-v` 옵션은 제거해서 쓰곤 합니다.

## Comments



### Comment 40524

- Author: roxie
- Created: 2025-06-23T17:21:08+09:00
- Points: 1

```  
alias enable-sudo-with-touchid="cat /etc/pam.d/sudo && echo 'BEFORE===================\n===================AFTER' && sudo gsed -i '1i auth sufficient pam_tid.so' /etc/pam.d/sudo && cat /etc/pam.d/sudo"  
```  
  
맥북에서 관리자 비밀번호를 눌러야 하는 상황 (예: `sudo`) 에서 Touch ID 로 진행할 수 있게 해주는 스크립트입니다.   
  
한번만 등록하면 되는데 왜 이게 alias 있냐... 하면, 가끔 맥 OS 버전을 업그레이드하면 이게 초기화 되더라구요.

### Comment 37421

- Author: tequila
- Created: 2025-04-21T12:07:48+09:00
- Points: 1

mysql을 잠시 띄우는 것을 앨리어스로 쓸 생각은 못해봤는데 재밌네요.  
저는 .zshrc에 이런 소소한 설정을 넣어두고 쓰고 있어요.  
```bash  
cpcat() {  
  cat "$@" | pbcopy  
}  
```  
`cpcat [파일명]`을 실행하면 특정 파일 내용이 클립보드로 들어갑니다.

### Comment 40525

- Author: roxie
- Created: 2025-06-23T17:22:01+09:00
- Points: 1
- Parent comment: 37421
- Depth: 1

```  
alias cb="pbcopy"  
```  
  
전 이러고 있어요 ㅋㅋ

### Comment 37422

- Author: winterjung
- Created: 2025-04-21T12:12:55+09:00
- Points: 1
- Parent comment: 37421
- Depth: 1

오 매번 pbcopy하기 귀찮았는데 좋네요! 이름이 카피캣이군요 ㅋㅋ

### Comment 37339

- Author: ndrgrd
- Created: 2025-04-19T16:44:13+09:00
- Points: 1

3000번대 포트 중 사용하지 않는 포트를 표시합니다.  
  
```bash  
function idleports()  
{  
    cols=10  
    count=0  
    output=""  
  
    listening_ports=($(sudo ss -tlpn | grep -o ':30[0-9]*' | sed 's/://g' | sort | uniq))  
  
    for port in {3000..3099}; do  
        if [[ " ${listening_ports[@]} " =~ " $port " ]]; then  
            output+="\033[38;5;235m$port\033[0m  "  
        else  
            output+="$port  "  
        fi  
  
        ((count++))  
        if ((count % cols == 0)); then  
            output+='\n'  
        fi  
    done  
  
    if ((count % cols != 0)); then  
        output+='\n'  
    fi  
  
    echo -e "$output"  
}  
```

### Comment 37386

- Author: kohs100
- Created: 2025-04-21T00:52:05+09:00
- Points: 1
- Parent comment: 37339
- Depth: 1

아닛 이건 꿀팁이군요... 감사합니다.
