"cat" 명령을 분기하는 방법은 무엇입니까?

"cat" 명령을 분기하는 방법은 무엇입니까?

이것은 내 bash 스크립트입니다.

#!/bin/bash
oo="`cat /etc/httpd/conf/httpd.conf`";
cat > /a.txt << EOF
$oo
EOF

단순히 /etc/httpd/conf/httpd.conf를 읽고 /a.txt에 씁니다. 문제는 이것이 sudo 명령을 사용하는 웹 스크립트를 통해 실행될 때 발생합니다. 어떤 이유로 모든 것이 a.txt에 기록되지는 않습니다. 파일

하지만 명령줄을 통해 실행하면.. 모든 것이 a.txt에 잘 기록됩니다.

따라서 다음을 추가하여 이를 백그라운드 프로세스로 보내야 할 것 같습니다.

> /dev/null 2>&1

그것에. 그런데 이것이 어떻게 이루어질 수 있습니까? 나는 노력했다

#!/bin/bash
oo="`cat /etc/httpd/conf/httpd.conf`";
cat > /a.txt << EOF
$oo
EOF > /dev/null 2>&1

이것은 작동하지 않았습니다.

답변1

어쩌면 이 예제는 지나치게 단순화되었을 수도 있지만 왜 그냥 실행하지 않는지 이해하는 데 어려움을 겪고 있습니다.

cp /etc/httpd/conf/httpd.conf /a.txt

즉, 단순히 한 파일에서 읽고 그 내용으로 다른 파일을 생성하는 명령이 이미 있는데, 그 이름은 입니다 cp. 유일한 실제 차이점은 /a.txt이미 존재하고 해당 권한을 유지하려고 하는 경우 또는 그와 같은 것입니다. 하지만 그때에도 다음을 수행하고 싶을 것입니다.

cat /etc/httpd/conf/httpd.conf >/a.txt

답변2

백그라운드에서 HERE-DOC를 사용하여 명령을 실행하려면 &첫 번째 줄에 다음을 지정하십시오.

command << EOF &
blah blah
EOF

이 특별한 경우에는 요점이 무엇인지 알 수 없습니다. 이미 stdout을 a.txt로 리디렉션했는데 동시에 /dev/null로 리디렉션하려는 이유는 무엇입니까?

답변3

내 생각에는 다음을 수행해야 합니다.

cat </etc/httpd/conf/httpd.conf >/a.txt

귀하의 질문에 있는 코드가 다른 효과를 가져야 한다는 것을 알 수 없을 수도 있습니다.

때를:

cat <file 

...또는...

cat <<FILE
    $(shell generated file contents)
FILE

cat의 표준 입력을 표준 출력에 복사하면 됩니다 . 따라서 이 시나리오에서는 다음과 같습니다.

<<FILE
    `cat <file`
FILE

<<FILE그리고 <file동일합니다.

관련 정보