단말기

단말기

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: )을 허용하거나 대화형 사용을 방지합니다.

관련 정보