"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그것은 동일합니다.

관련 정보