シェルスクリプトを使用して特定のコンテンツを含むファイルを作成するには? [コピー]

シェルスクリプトを使用して特定のコンテンツを含むファイルを作成するには? [コピー]

シェルスクリプトで特定の内容を含むファイルを生成する必要があります。どうすればいいですか?を使用して実行できますかcat

答え1

これは、cat次の文書で行うことができます。

cat >outfilename <<END_FILE
this is the contents of the file

       la-di-da!

END_FILE

ここの文書は、<<END_FILE末尾の対応する文書の間の内容です。END_FILE終わりEND_FILEは行の唯一の単語で、行の先頭に配置する必要があります。単語は、END_FILE任意の単語(たとえば、END_CONFIG_FILEまたはWHEN_WILL_SUMMER_COME意味のある単語)にすることができます。

変数は文書内で拡張されます。必要でない場合は、ここで最初の文書区切り文字を引用してください。

cat >outputfilename <<'MY_DOC'
another here document thingy

     The $PATH variable will not be expanded here
MY_DOC

技術的にここにある文書は次のとおりです。リダイレクト上記の例では、これをcatコマンドにリダイレクトします。このcatコマンドは、標準出力リダイレクトを使用して指定されたファイルに渡します。

タグ付けされた質問も参照してください。このウェブサイトから。


コメントの中で:「わかりました。許可が拒否されましたそしてsudo役に立たない」

はい、ディレクトリへの書き込み権限がないと、出力ファイルにリダイレクトできません。また、sudo呼び出し前に出力ファイルが生成されるため、これを使用することはsudo役に立ちません。

あなたはできます

sudo tee outputfilename >/dev/null <<MY_DOC
contents of file
goes here
MY_DOC

これはrootとして実行され、tee現在のディレクトリにteerootとして作成されます。outputfilenameリダイレクトは、文書を端末に出力するのを/dev/nullやめることです。tee

このteeコマンドは、コマンドラインで指定されたすべてのファイルと標準出力(または他のコマンドにパイプされていない場合は端末)に入力をコピーします。

答え2

任意の(必ずしもテキストである必要はありません)コンテンツの場合は、次のものを使用できますuudecode

uudecode << "EOF" | gunzip > some-file
begin 644 -
M'XL(``S*N%H``ZMW]7%C8F1D@`%F!CL&$.]"&(3O`!7W8&>"JW%@L&#@!)*R
M##(,;$`^*Y(Z=/H'(RK-`;>'@8$%B"V@QJ+3,@RH-",2S<J`&[QXPHA",S`H
MP/6!W#KA,T1\PF=%%+I""**Z0)4!11\35-^-OQ!]-_XJHM`?H-9\0/,?"Q2'
M0/V#3KLPH-(L4#K@:4D*B+U@/<1`=+H%:@&,AND+!.ICPP@-W$``2@=![<,5
M+@4\#"@T+%3U<S*3S$ST<U)T<S+S2BMT*RS,=,U,](KS]8S`;A*`JG7W"P6K
MAX6C`M3-(@R0-`"25^T\MOA2RP9MCB/-5_Z?6'QD>\KV8D&@7`54'SL0+UOH
MP2'$N$Y>XXJ`\`H6A@D@N4H@K@+B&B"N`^(&(&X$XF8@;H6ZLQV(.Y'\W06E
MNX%X;T#9O->7W_,9'?DNM+/W(]^T!9W3;Q9&R.QZ/*GFO$YRT>09-FNW_6)\
M[=_WM][)]>H;RT_=,CYV2[F?)CE^9;*KC]Z\Z+M0?=:LTM[C#Q(T97MD&/``
C?Z"GA;"('V?"+OX1A[@'(W;Q<&;LXINAY@``J665NN@#````
`
end
EOF

出力(上記の例では、私のシステムの最初の1000バイト/bin/ls)はgzip < file | uuencode -

関連情報