">>" 외에 파일 끝에 줄을 추가하는 또 다른 간단한 방법이 있습니까?

">>" 외에 파일 끝에 줄을 추가하는 또 다른 간단한 방법이 있습니까?

최근에 나는 짧은 문장을 tree_hole파일에 반영하고 있습니다.

나는 echo 'something' >> tree_hole전에 이 일을 한 적이 있습니다.

>하지만 나는 종종 실수를 하기 때문에 실수를 하면 항상 걱정한다 >>.

그래서 bashrc에 나만의 전역 bash 함수를 만들었습니다.

function th { echo "$1" >> /Users/zen1/zen/pythonstudy/tree_hole; }
export -f th

하지만 파일 끝에 줄을 추가하는 또 다른 쉬운 방법이 있는지 알고 싶습니다. 다른 경우에는 더 자주 사용해야 할 수도 있기 때문입니다.

당신은 있나요?

답변1

noclobber옵션을 설정합니다.

bash-3.2$ set -o noclobber
bash-3.2$ echo hello >foo
bash-3.2$ echo hello >foo
bash: foo: cannot overwrite existing file
bash-3.2$ 

답변2

>운영자에 의해 파일이 손상될까 봐 걱정된다면 파일 속성을 추가 전용으로 변경할 수 있습니다
.외부 2/외부 3/외부 4파일 시스템: chattr +a file.txt
inXFS파일 시스템:echo chattr +a | xfs_io file.txt

함수를 원하시면 제가 직접 함수를 만들었고(서비스 파일에서 출력을 기록하는 데 사용합니다) 목적에 맞게 변경할 수 있습니다.

# This function redirect logs to file or terminal or both!
#@ USAGE: log option data
# To the file     -f file
# To the terminal -t
function log(){
        read -r data       # Read data from pipe line

        [[ -z ${indata} ]] && return 1    # Return 1 if data is null

        # Log to /var/log/messages
        logger -i -t SOFTWARE ${data}

        # While loop for traveling on the arguments
        while [[ ! -z "$*" ]]; do
                case "$1" in
                        -t)
                                # Writting data to the terminal
                                printf "%s\n" "${data}"
                                ;;
                        -f) 
                                # Writting (appending) data to given log file address
                                fileadd=$2
                                printf "%s %s\n" "[$(date +"%D %T")] ${data}" >> ${fileadd}
                                ;;
                        *)
                                ;;
                esac
                shift           # Shifting arguments
        done
}

답변3

사용tee추가 옵션을 사용하십시오.

foo | tee -a some-file
# or
tee -a some-file <<EOF
blah blah
EOF
# or 
tee -a some-file <<<"blah blah"

답변4

다음을 사용하고 싶습니다 sed(백업 복사본이 있는 경우에도 - 다음 확장자 참조 -i).

sed -i.bak '$ a\something' /Users/zen1/zen/pythonstudy/tree_hole

관련 정보