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

bash 환경에서 명령줄 vi 스타일로 편집하기

# bash(or zsh)에서 명령줄을 vi 스타일로 편집할 수 있다.
# 다음 명령으로 실행하면
set -o vi

# vi 옵션이 활성화(on)된것을 확인할 수 있다.
set -o | grep vi

# 명령줄을 입력하다가 esc 로 명령모드로 전환해 w, b 로 워드단위로 이동할 수 있다.
# a, i 로 입력모드로 돌아 입력할 수 있다.
# v 로 블럭 지정등 기타 vi 편집 기능을 사용할 수 있다.

# vi 옵션을 비활성화(off)하려면
set -o novi

# 참고
http://linuxcommand.org/lc3_man_pages/seth.html

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'