suman-f
표준 입력에서 입력을 받는 응용 프로그램이 있습니다. 명령줄에서 실행할 수 있는 이 응용 프로그램을 호출해 보겠습니다 . 실제 인간 사용자에게만 입력을 제한하고 자동화된 프로그램의 입력을 허용하지 않고 싶습니다. 그 이유는 여러 프로세스가 stdin으로 정보를 보내면 정보 채널은 하나뿐이고 통신자는 여러 개이기 때문에 잘못된 코드가 나타나기 때문입니다.
suman-f
인간 이외의 다른 것이 터미널을 통해 실행되는 것을 방지하는 방법이 있습니까 ?
또는 표준 입력을 재사용할 수 있는 마법 같은 방법이 있다면 듣고 싶습니다.
답변1
짧은 대답은아니요.
Unix 시스템은 특정 프로세스의 stdin이 사람에 의해 처리되는지 여부를 알 수 있는 방법이 없습니다.
단말기
가장 좋은 근사값은 입니다 tty
( 참조 man tty
).
tty(터미널)는 시스템과 상호 작용하는 방법입니다(참조:"터미널", "쉘", "tty" 및 "콘솔"의 정확한 차이점은 무엇입니까?).
이것이 작동하는 방식입니다
if tty -s
then
echo a human might be reading "or not)"
else
echo output is a file
fi
다시 말해서
tty -s
를 반환 하면false
출력이 파일(사용자가 아님)이라는 것을 알 수 있습니다.tty -s
가 반환 되면true
알 수 없습니다.
이는 다양한 형식(예 ls
: )을 허용하거나 대화형 사용을 방지합니다.