한 줄 명령을 사용하여 이것을 내 호스트 파일에 쉽게 추가하려고 하는데 예상치 못한 결과가 나타납니다.
$ 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
특히 외부에서 탈출할 필요가 없기 때문에 이것이 더 편리하다고 생각합니다 '
.