카테고리 없음

Bash: Redirector 상황별 응용하기

SciomageLAB 2024. 10. 2. 20:47
반응형

상황 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를 이용해서 메모리 스트림으로 처리하기

데이터가 스트림에서 읽히면 없어지므로 파일처럼 이전게 읽힐 일이 없고 디스크에 저장되지 않은다.
img

# 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>&-

img

반응형