레이블이 cat인 게시물을 표시합니다. 모든 게시물 표시
레이블이 cat인 게시물을 표시합니다. 모든 게시물 표시

git commit master 브랜치 방지

# 보통 별도의 브랜치를 생성해서 작업해 커밋하고
# master, develop 브랜치에는 github 페이지에서 pull request 하게 된다.
# 만약 로컬에서 master, develop 브랜치 상태에서 커밋을 방지하려면
# 다음과 같이 pre-commit 파일을 만들어 주면 된다.
# 참고로 아래처럼 cat 사용시 구분자 (zzz) 를 '' 또는 "" 로 묶어줘야 한다.
# 아니면 $는 이스케이프(\)처리해줘야 한다.
cat > .git/hooks/pre-commit << 'zzz'
#!/bin/sh
branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$branch" = "master" ] || [ "$branch" = "develop" ]; then
  echo "You can't commit directly to $branch branch"
  exit 1
fi
zzz
chmod +x .git/hooks/pre-commit

# 이제 master, develop 등에 브랜치에서 commit 명령을 실행하면
# 위 에러메시지 출력 후 커밋이 진행되지 않는다.

zsh file exist 에러 처리, heredoc 사용하기

# zsh 쉘을 사용중에 파일을 오버라이트 하는 경우 다음과 같이 에러가 발생힌다.
cat a.txt > ysoftman.txt
zsh: file exists:
ysoftman.txt

# 해결방법1
# >! 로 강제 오버라이트 되도록 할 수 있다.
cat a.txt >! ysoftman.txt

# 해결방법2
# 현재 noclobber 상태 파악
set -o | grep noclobber

# noclobber off 로 설정(clobber on)
set -o clobber
cat a.txt > ysoftman.txt

# 참고
# set -o 옵션명 : 옵션 활성화(on)
# set -o no옵션명 : 옵션 비활성화(off)

#####

# heredoc 사용하기
# zzz 를 입력되기 까지 모든 내용을 cat 입력(<<)으로 받고
# cat 은 입력받은 내용을 stdout으로 출력하는데 > 를 통해 파일에 쓴다.
cat > redirect.test.sh << 'zzz'
#!/bin/sh
var1="ysoftman"
echo "$var1"
zzz

# heredoc 은 2단계로 수행된다.
# 1. open file.txt
# 2. cat (> or >>) file.txt
# sudo 명령이 필요한 경우
# sudo cat > /etc/redirect.test.sh << 'zzz' ...
# 1. /etc/redirect.test.sh 파일은 현재 사용자 계정으로 오픈하고
# 2. 그 후에 sudo cat 명령을 실행하게 되어 permission denied 가 된다.
# 그래서 다음과 같이 bash -c 로 묶어 처리해야 한다.
sudo bash -c "cat > /etc/redirect.test.sh" << 'zzz'
#!/bin/sh
var1="ysoftman"
echo "$var1"
zzz

# heredoc 의 내용을 파이프(|)로 전달 할 수 도 있다.
cat << zzz | xargs echo "args->$*"
apple
lemon
banana
123
orange
zzz

# <<< $'' 을 사용하면 명령에 stdin 을 전달할 수 있다.
# 다음 pipe 이용 방법과 같다.
# echo -e 'bill\npassword123' | bash read_password_test.sh
bash read_password_test.sh <<< $'bill\npassword123'