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