문제는 링크 된 기사에서 사용 된 구문에 있습니다. 정확히 무엇이 잘못되었는지 이해하려면 다음을 살펴 보겠습니다 man wall
.
사용법 man wall
:
wall [file]
Wall displays the contents of file or, by default, its standard input
따라서 메시지에 대한 두 가지 소스 중 하나 를 wall
허용 합니다 .
파일 이름 인수
지정된 모든 명령 행 인수 wall
는 파일 이름이어야합니다. 인수가 메시지 또는 파일 이름인지 여부를 알 수있는 신뢰할 수있는 방법이 없으므로 wall
후자라고 가정하고 표준 입력 에서 들어오는 것을 무시 하고 해당 파일에서 메시지를 읽으십시오.
주어진 경우, 파일에서 읽으려고 who's out there
하지만 찾지 못합니다. 파일 읽기는 일반적으로 수퍼 유저로 제한됩니다. wall "who's out there"
권한이없는 사용자로 실행했다면 아마도 그 결과가 나왔을 것입니다.wall: will not read who's out there - use stdin.
표준 입력
명령 행에 파일 이름 인수가 없으면 표준 입력에서 읽기 시작합니다. 명령의 표준 입력에 정보를 공급하는 방법에는 여러 가지가 있습니다. 하나는 UNIX 파이프 를 사용하는 것 입니다. 파이프 라인은 왼쪽 명령의 표준 출력을 오른쪽 명령의 표준 입력에 연결합니다.
$ echo "who's out there" | wall
또 다른 방법은 here 문서 를 사용하는 것 입니다. A here document
는 별도의 명령을 사용하여 출력을 생성하는 중간 단계없이 문자열 (자체 줄에 지정된 끝 표시까지)을 명령의 표준 입력으로 직접 전달하는 쉘 구조입니다.
$ wall << .
who's out there?
.
이것은 기본적으로 터미널 자체가 wall
표준 입력에 연결되고 wall
파일 끝 문자 ( Ctrl+D)를 받을 때까지 읽기 시작 하기 때문에 "여기서는 문서를 쓸모가 없습니다" 입니다 .
$ wall
who's out there?
^D
으로 리치 Homolka이 코멘트에 언급, 일부 쉘은 지원 here strings
명령 또는 끝 마커없이 리터럴 문자열을 전달 할 수있는 :
$ wall <<< "who's out there?"
모두 wall
표준 입력에 무언가를 공급 합니다. 반면, 차이는 파이프 라인이 또 다른 명령의 출력을 연결하는 것이다 here documents
와 here strings
직접 문자열을 전달한다. 후자의 두 가지 장점 echo
은 파이프 예제 의 명령이 쉘 내장 명령이므로 wall
모든 경우에 입력을 제공하는 쉘이기 때문에 미적 입니다.
echo xxx | yyy
내가 cludgy 찾을 구문wall <<<'your message'