쉘 스크립트를 사용하여 특정 내용이 포함된 파일을 만드는 방법은 무엇입니까? [복사]

쉘 스크립트를 사용하여 특정 내용이 포함된 파일을 만드는 방법은 무엇입니까? [복사]

쉘 스크립트에서 특정 내용이 포함된 파일을 생성해야 합니다. 어떻게 해야 합니까? 을 사용하여 수행할 수 있습니까 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

이는 루트로 실행되며 tee현재 디렉터리에 tee루트로 생성됩니다 . 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 -.

관련 정보