Linux wall 명령이 문자열 인수를 브로드 캐스트하지 않는 이유는 무엇입니까?


13

본인은 여기 이 작동해야하지만, 그렇지 않습니다 :

# usage: wall [file]
root@sys:~> mesg
is y

root@sys:~> wall "who's out there"
wall: can't read who's out there.

경우 mesg로 설정되어 y, 어떤 문자열을 방송에서 저를 방지거야? 파일 옵션이 작동 하는지 확인했습니다 .

root@sys:~> wall test
Broadcast Message from root@sys (/dev/pts/1) at 15:23 ... 
Who's out there?

답변:


21

문제는 링크 된 기사에서 사용 된 구문에 있습니다. 정확히 무엇이 잘못되었는지 이해하려면 다음을 살펴 보겠습니다 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 documentshere strings직접 문자열을 전달한다. 후자의 두 가지 장점 echo은 파이프 예제 의 명령이 쉘 내장 명령이므로 wall모든 경우에 입력을 제공하는 쉘이기 때문에 미적 입니다.


1
배쉬 / zsh을은 피하기 위해 다른 형식을 가지고 echo xxx | yyy내가 cludgy 찾을 구문wall <<<'your message'
리치 Homolka

.bashrc가 없거나 zsh에 해당하는 것이 없다면 벽의 구문은 쉘을 기반으로해서는 안됩니다. 나는 bash도 사용한다.
mbb

감사합니다 peth-내가 배우는 데 필요한 구문 체계입니다!
mbb

내 실수 리치! Peth의 설명으로 나는 당신이 wall <<< stringsintax 를 제공하고 있음을 알았습니다. 꽤 훌륭합니다. 어느 쪽이 <<<정확하게하고 있는지 설명 할 수 있습니까 ? 파일이 필요한 cmd가 뒤에 문자열을 허용 할 수 있다는 것이 이상합니다 <<<. 다시 감사합니다.
mbb

1
@mjb 실제로 herestring이 echo보다 더 효율적일 가능성은 낮습니다. herestrings는 임시 파일을 만든 다음 프로세스의 stdin (파일 설명자 0)으로 첨부하여 wall작동합니다. t 파일을 지정하십시오). herestrings가 파일을 작성하는지 확인하는 방법으로 $ readlink /proc/self/fd/0 <<< test다음과 같이 인쇄됩니다 /tmp/sh-thd-4228536315 (deleted).
스튜어트 P. 벤틀리

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.