질문:
명명된 파이프에 명령을 보내야 하며 오류나 "엉뚱한" 문자가 아닌 명령만 전송되는지 확인해야 합니다.
예:
나는 다음을 사용하고 있습니다 :
echo "command" > /path/to/namedPipe
이것은 잘 작동하지만 잘못된 키 입력이 파이프로 전송될 수 있다는 이상한 점을 발견했습니다. 예를 들어:
echo "command" > /path/to/namedPipe straycharacters
그런 다음 <command>
둘 다 및 <straycharacters>
가 명명된 파이프에 기록됩니다. 이런 일이 일어날 거라고는 상상도 못했는데 어떤 경우에는 내 프로그램이 정말 엉망이 됐어요. 또한 echo에는 따옴표가 필요하지 않은 것 같습니다. 내 명령에는 따옴표가 필요하지 않고 실제 따옴표만 필요합니다 <command>
. <command>
파이프에만 쓰는 가장 좋은 방법은 무엇입니까?
가능한 해결책:
printf "command" > /path/to/namedPipe straycharacters
내 터미널에서는 인쇄만 <command>
하고 인쇄는 하지 않습니다 <straycharacters>
. 지금까지는 내 프로그램과 호환되는 것 같습니다. 그러나 새 줄을 포함하지 않는 것처럼 보인다는 점에서 echo와 약간 다릅니다.
답변1
이 명령
echo "command" > /path/to/namedPipe straycharacters
동등하다
echo "command" straycharacters >/path/to/namedPipe
(비교하다이것) echo
이 경우에도 모든 피연산자를 인쇄합니다 straycharacters
. 다시 말하지만, "작동하는" 솔루션은 다음과 같습니다.
printf "command" straycharacters >/path/to/namedPipe
단순히 "작동"하는 이유는
command
분명히 셸에서 문자 그대로 해석되지 않는 조각(예: )은 포함되지 않습니다${PATH}
.command
printf
문자 그대로 해석되지 않은 조각은 분명히 포함되지 않습니다. 메모는 형식command
으로 해석됩니다(man 1 printf
자세한 내용 참조) .%s
straycharacters
command
그것을 (및 개행 문자) 전달하는 올바른 방법 은 다음과 같습니다.
printf '%s\n' 'command' >/path/to/namedPipe # straycharacters
어디
\n
개행 문자 인쇄를 담당합니다.straycharacters
댓글에 나타납니다;- 문자 그대로 전달되어야 하는 모든 문자열은 작은따옴표로 묶입니다( 예를 들어 의도적으로 매개변수 대체에 의존하는 경우
printf
큰따옴표를 원할 수도 있음 ).command
코드에 "잘못되거나 어색한 문자"를 포함하는 것은 잘못된 것입니다. 이를 무시하는 구문을 찾으려고 하지 말고 쓰레기를 삭제하고 주의를 기울이십시오. 이렇게 하면 코드가 멋지고 깔끔해집니다.
straycharacters
그렇지 않더라도 echo
여전히 올바른 도구는 아닙니다. 바라보다왜 printf가 echo보다 나은가요?