답변:
echo "some data for the file" >> fileName
sudo sh -c 'echo "some data for the file" >> fileName'
#!/bin/sh
FILE="/path/to/file"
/bin/cat <<EOM >$FILE
text1
text2 # This comment will be inside of the file.
The keyword EOM can be any text, but it must start the line and be alone.
EOM # This will be also inside of the file, see the space in front of EOM.
EOM # No comments and spaces around here, or it will not work.
text4
EOM
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
cat > FILE.txt
이 완료되면 다음을 누릅니다 CTRL + D를 .
나는 이것이 지독한 오래된 질문이라는 것을 알고 있지만 OP는 스크립팅에 관한 것이므로 Google이 나를 여기로 데려 갔다는 사실 때문에 동시에 읽고 쓰기 위해 파일 설명자를 여는 것도 언급해야합니다.
#!/bin/bash
# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt
# Let's print some text to fd 3
echo "Roses are red" >&3
echo "Violets are blue" >&3
echo "Poems are cute" >&3
echo "And so are you" >&3
# Close fd 3
exec 3>&-
그런 다음 cat
터미널의 파일
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
이 예에서는 파일 설명자 3에서 읽고 쓸 수 있도록 poem.txt 파일을 열었습니다. 또한 * nix 상자는 stdin, stdout 및 stderr (fd 0,1,2)보다 더 많은 fd를 알고 있음을 보여줍니다. 실제로 많이 보유하고 있습니다. 일반적으로 커널이 할당 할 수있는 최대 파일 디스크립터 수는 9 개를 초과 /proc/sys/file-max
하거나 /proc/sys/fs/file-max
fd를 사용하는 것은 쉘에서 내부적으로 사용하는 fd와 충돌 할 수 있으므로 위험합니다. 따라서 fd의 0-9 만 귀찮게 사용하지 마십시오. bash 스크립트에 9 개의 파일 설명자가 더 필요하다면 다른 언어를 사용해야합니다 :)
어쨌든 fd는 많은 흥미로운 방식으로 사용될 수 있습니다.
여기에 문서를 사용할 수없는 환경 ( Makefile
, Dockerfile
등)의 경우 , 일반적 printf
으로 읽기 쉽고 효율적인 솔루션을 사용할 수 있습니다 .
printf '%s\n' '#!/bin/sh' '# Second line' \
'# Third line' \
'# Conveniently mix single and double quotes, too' \
"# Generated $(date)" \
'# ^ the date command executes when the file is generated' \
'for file in *; do' \
' echo "Found $file"' \
'done' >outputfile
나는 몇 가지 완벽하게 훌륭한 답변이 있지만 모든 가능성에 대한 간결한 요약은 없다고 생각했다. 그러므로:
여기서 대부분의 답변 뒤에 핵심 교장은 리디렉션 입니다. 파일에 쓰기위한 중요한 리디렉션 연산자는 두 가지입니다.
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
이와 같은 고정 입력 소스가 아닌 다른 사람들 echo 'text'
도 "문서 여기"를 통해 대화식으로 파일에 쓸 수 있으며 위의 bash 매뉴얼 링크에 자세히 설명되어 있습니다. 예를 들어
cat > FILE.txt <<EOF
또는 cat >> FILE.txt <<EOF
동일한 리디렉션 연산자를 사용하지만 "여기 문서"를 통해 다른 레이어를 추가하십시오. 위의 구문에서의 출력을 통해 FILE.txt에 씁니다 cat
. 대화식 입력에 특정 문자열 (이 경우 'EOF')이 제공된 후에 만 쓰기가 수행되지만 다음과 같은 문자열 일 수 있습니다.
cat > FILE.txt <<'StopEverything'
또는 cat >> FILE.txt <<'StopEverything'
잘 작동합니다. 여기서 문서는 다양한 구분 기호 및 기타 흥미로운 구문 분석 문자를 찾아 보므로 이에 대한 자세한 내용은 문서를 참조하십시오.
약간 복잡하고 리디렉션 및 Here Documents 구문을 이해하는 데 더 많은 연습이 필요하지만 Here Document 스타일 구문을 표준 리디렉션 연산자와 결합하여 Here String이 될 수 있습니다.
cat 입력의 출력 리디렉션cat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
here document 및 vi를 사용할 수도 있습니다. 아래 스크립트는 3 줄과 변수 보간으로 FILE.txt를 생성합니다.
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
그런 다음 파일에는 아래와 같이 3 줄이 있습니다. "i"는 vi 삽입 모드를 시작하고 마찬가지로 Esc 및 ZZ로 파일을 닫습니다.
#This is my var in text file
var = Test
#Thats end of text file