sudo에서 "-c" 플래그를 사용할 때 예기치 않은 EOF가 발생합니다.

sudo에서 "-c" 플래그를 사용할 때 예기치 않은 EOF가 발생합니다.

나는 sudo를 직접 선택하려고 노력해 왔으며 며칠 동안 이 측면 문제에 갇혀 있었습니다.

아래 명령을 실행할 때 file1.txt의 두 속성(D,44.... 및 E,44....)을 "TESTINFORMATION" 앞에 별도의 줄로 사용하여 올바른 변경 정보를 생성할 수 있습니다.

sed '/TESTINFORMATION/i\attribute="D,44444,44444" \nattribute="E,44444,44444"' file.txt >> file1.txt

그러나 sudo에 전달된 "c" 매개변수를 사용하여 명령을 실행하려고 하면 예상치 못한 EOF가 계속 발생합니다.

sudo -S su - root -c 'sed \'/TESTINFORMATION/i\attribute="D,44444,44444" \nattribute="E,44444,44444"\' file.txt >> file1.txt'

쌍으로 된 아포스트로피와 이스케이프 문자를 살펴봤지만 여전히 오류가 표시되지 않습니다.

EOF 문제를 해결하기 위한 모범 사례는 무엇입니까?

해결책: DopeGhoti의 솔루션과 Steeldriver의 솔루션을 사용해 보았는데 둘 다 효과가 있었습니다. 가능한 솔루션의 예는 다음과 같습니다.

sudo -S su - root -c '\''sed \'/TESTINFORMATION/i\attribute="D,44444,44444" \nattribute="E,44444,44444"\'\'' file.txt >> file1.txt'

소중한 시간을 내주신 모든 분들께 감사드립니다 :)

답변1

문제는 "강한 따옴표" 안에 포함시키려는 "강한 따옴표" 문자열이 있다는 것입니다. 이것은 작동하지 않습니다. 추악한 대답은 내부 따옴표를 피하는 것입니다. 아마도 더 좋고 관리하기 쉬운 대답은 어휘적으로 복잡한 sed명령을 가져와 스크립트에 넣은 다음 sudo예를 사용하여 스크립트 자체를 실행하는 것입니다 sudo /path/to/sed_script.sh.

sudo실행에 사용하는 su -S su - root -c 'somecommand'것은매우그냥 우회해서 달리세요 sudo somecommand.

관련 정보