테크매니아
Bash: Redirection 잘 써보기 본문
반응형
상황 1: 로그 파일 분리 저장
서버에서 실행 중인 스크립트가 표준 출력과 표준 오류를 분리해서 다른 파일에 저장하기
#!/bin/bash
# 정상 출력 예시
echo "Starting backup process..."
# 존재하지 않는 파일을 복사하려고 시도해서 오류 발생
cp /nonexistent/file /backup/
# 정상 출력 예시
echo "Backup completed successfully (if no errors)."
실행
./backup.sh > /backup/backup.log 2> /backup/backup_error.log
스크립트의 실행은 두 리다이렉션이 모두 적용된 후에 시작됨.
상황 2: 소켓을 통한 데이터 입출력 (채팅 구현)
server
# server
#!/bin/bash
# 소켓 파일을 생성하고 읽기와 쓰기 모드로 엽니다.
exec 3<> /tmp/server_socket
while [ true ]
do
# 클라이언트로부터 데이터 읽기
read -u 3 request
echo $request
sleep 1
done
# 파일 디스크립터 닫기
exec 3>&-
client
#!/bin/bash
# 소켓 파일을 생성하고 읽기와 쓰기 모드로 엽니다.
exec 3<> /tmp/server_socket
while [ true ]
do
# 서버에게 데이터 전송
read answer
echo $answer >&3
done
# 파일 디스크립터 닫기
exec 3>&-
mkfifo를 이용해서 메모리 스트림으로 처리하기
데이터가 스트림에서 읽히면 없어지므로 파일처럼 이전게 읽힐 일이 없고 디스크에 저장되지 않은다.
# server
#!/bin/bash
# 소켓 파일을 생성하고 읽기와 쓰기 모드로 엽니다.
mkfifo /tmp/server_socket
exec 3<> /tmp/server_socket
while true
do
# 클라이언트로부터 데이터 읽기
read -u 3 request
echo $request
sleep 1
done
# 파일 디스크립터 닫기
exec 3>&-
반응형