![다른 사용자 권한을 가진 파일에 에코](https://linux55.com/image/103385/%EB%8B%A4%EB%A5%B8%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EA%B6%8C%ED%95%9C%EC%9D%84%20%EA%B0%80%EC%A7%84%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%97%90%EC%BD%94.png)
root
아래와 같이 다양한 사용자가 파일 쓰기를 구현하려고 합니다 . 그러나 파일이 생성되었지만 아무것도 기록되지 않습니다.
system("(echo 'ab' | su - root -c "echo 'Logging Enabled' |tee myLog.txt")>/dev/null");
또한 >
대신 시도했습니다.tee
system("(echo 'ab' | su - root -c "echo 'Logging Enabled' > myLog.txt")>/dev/null");
이 목표를 달성하는 더 좋은 방법이 있습니까?
감사해요
답변1
귀하의 질문에서 실제로 파일에 어떤 텍스트를 표시하려는지 명확하지 않습니다.
쉘에서는 할 수 있습니다
echo 'ab' | sudo tee myLog.txt
myLog.txt
표준 출력에 "ab"를 씁니다 . 사용 이유는 tee
일반적으로 권한 있는 사용자로 쉘을 실행할 필요가 없고 표준 출력으로의 출력이 실제로 필요한 것이 아니기 때문에 이를 억제하기 위해 리디렉션을 추가할 수 있는 부작용 때문입니다.
echo 'ab' | sudo tee myLog.txt >/dev/null
안에체계(삼)C 코드에서 호출하려면 간단히 문자열에 넣으면 됩니다.
system("echo 'ab' | sudo tee myLog.txt >/dev/null");
다음은 본질적으로 정의되지 않았습니다.
echo 'ab' | echo 'Logging enabled'
그러나 일반적으로 "ab"는 단순히 폐기됩니다. 왜냐하면 두 번째 것은 echo
아무 작업도 수행하지 않고 자체 출력을 생성하기 때문입니다. 두 개의 텍스트 조각을 결합하려면 다음과 같이 시도하십시오.
printf "%s\nLogging enabled\n" "$(echo ab)"
그러나 이 두 개의 개별 명령문으로 무엇을 하려는지 echo
, 그렇다면 이를 처리하는 방법은 매우 불분명합니다.
(분명한 점을 다시 말하면, a | b
표준 출력을 a
표준 입력 에 연결하고 두 프로세스를 병렬로 실행하면 표준 입력은 여전히 의 표준 입력 및 표준 출력 b
에 연결됩니다 .)a
b