에코에서 출력을 리디렉션할 때 이러한 예기치 않은 동작을 방지하려면 어떻게 해야 합니까?

에코에서 출력을 리디렉션할 때 이러한 예기치 않은 동작을 방지하려면 어떻게 해야 합니까?

한 줄 명령을 사용하여 이것을 내 호스트 파일에 쉽게 추가하려고 하는데 예상치 못한 결과가 나타납니다.

$ sudo sh -c 'echo -e "10.0.10.0\tserver.bananas.com\tserver" >> /etc/hosts'

$ cat /etc/hosts
-e 10.0.10.0        server.bananas.com        server

에코에서 -e 스위치를 사용하여 탭에 대해 백슬래시 이스케이프를 활성화했지만 -e가 리디렉션된 출력에 포함되었습니다.

이것을 어떻게 피할 수 있습니까?

답변1

귀하의 질문에 따라 왜 echo가 실패하는지 잘 모르겠지만 일반적으로 사용하겠습니다 printf. 그 결과는 더 예측 가능합니다.

printf '%s\t%s\t%s\n' '10.0.10.0' 'server.bananas.com' 'server'

설명하다

  • %s\t%s\t%s\n: 이 섹션에서는 출력 형식(예: 문자열, 탭, 문자열, 탭, 문자열, 개행)을 설명합니다.
  • 이 세 가지 문자열은 다음 매개변수에 제공됩니다 printf.

루트가 소유한 파일에 쓰기

또한, 여러분이 이것을 알고 있는지 확실하지 않지만 sudo sh -c대신 해당 구조를 사용할 수 있습니다 sudo tee. 즉

printf … | sudo tee -a /etc/hosts

특히 외부에서 탈출할 필요가 없기 때문에 이것이 더 편리하다고 생각합니다 '.

관련 정보