여러 줄로 된 문서가 있는데 이를 한 줄 문자열로 변환하고 싶습니다.
cat <<-"PHPCONF" > /etc/php/*/zz_overrides.ini
[PHP]
post_max_size = 200M
upload_max_filesize = 200M
cgi.fix_pathinfo = 0
PHPCONF
내가 얻을 수 있는 가장 가까운 결과는 다음과 같습니다.
cat >"/etc/php/*/zz_overrides.ini" <<< "[PHP] post_max_size = 200M upload_max_filesize = 200M cgi.fix_pathinfo = 0"
하지만 내 생각엔 아닌 것 같아개행 문자각 명령어가 실행 가능해지면 최종 결과는 다음과 같다고 가정합니다.끈. 결국 "비정통적인" 방법이 있는 것은 아닐까?
Heredoc과 Herestring은 모두 이 무거운 sed 작업을 대체하도록 설계되었습니다.
sed -i "s/post_max_size = .M/post_max_size = 200M/ ; s/upload_max_filesize = .M/upload_max_filesize = 200M/ ; s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php/*/fpm/php.ini
답변1
printf "this\nthat\n" > /some/file
예를 들어 ANSI-C 인용을 사용하여 개행 문자가 포함된 here-string을 만들 수 있다는 사실은 제쳐두세요 .
$ cat <<< $'this\nthat'
this
that
또한 따옴표로 인해 다음과 같은 이름의 디렉터리에 파일을 생성하려고 시도합니다 *
.
cat > "/etc/php/*/zz_overrides.ini"
이는 Bash에서 작동하지만 glob이 파일과 일치하는 경우에만 작동합니다( /etc/php/foo/zz_overrides.ini
및 가 있으면 Bash는 오류를 표시합니다 /etc/php/bar/zz_overrides.ini
).
cat > /etc/php/*/zz_overrides.ini
답변2
heredoc이 필요하지 않거나 외부 명령(예 : ) bash
을 호출할 필요 없이 개행 문자가 포함된 문자열을 직접 사용할 수 있다고 생각합니다 .cat
$ php_conf='
[PHP]
post_max_size = 200M
upload_max_filesize = 200M
cgi.fix_pathinfo = 0
'
$ echo "$php_conf"
[PHP]
post_max_size = 200M
upload_max_filesize = 200M
cgi.fix_pathinfo = 0