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