回答:
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
私はこれがいまいましい質問であることを知っていますが、OPはスクリプティングに関するものであり、グーグルが私をここに連れてきたという事実のため、同時に読み取りと書き込みのためにファイル記述子を開くことについても言及する必要があります。
#!/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
この例では、ファイルpoem.txtを開いて、ファイル記述子3の読み取りと書き込みを行います。また、* nixボックスは、fdinがstdin、stdout、およびstderr(fd 0、1、2)だけであることを示しています。それは実際にはたくさんあります。通常、ファイルの最大数は、カーネルが割り当てることができディスクリプタで見つけることができる/proc/sys/file-max
か/proc/sys/fs/file-max
が、それは、FDの内部でシェルが使用すると競合する可能性があるので9上の任意のFDを使用することは危険です。したがって、気にせず、fdの0〜9のみを使用してください。bashスクリプトでさらに9つのファイル記述子が必要な場合は、とにかく別の言語を使用する必要があります:)
とにかく、fdは多くの興味深い方法で使用できます。
hereドキュメントが利用できない環境(、、など)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
完全に良い答えはいくつかあると思いましたが、すべての可能性の簡潔な要約はありませんでした。したがって:
ここでのほとんどの答えの背後にある中心的なプリンシパルはリダイレクトです。2つは、ファイルに書き込むための重要なリダイレクト演算子です。
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'
同様に動作します。ここで、ドキュメントはさまざまな区切り文字やその他の興味深い解析文字も探します。詳細については、ドキュメントを参照してください。
少し複雑で、リダイレクトとヒアドキュメントの構文の両方を理解するための練習問題ですが、ヒアドキュメントスタイルの構文と標準のリダイレクト演算子を組み合わせて、ヒア文字列にすることができます。
cat入力の出力のリダイレクトcat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
hereドキュメントと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