역방향 TCP 셸을 실행하고 su를 실행하려고 하면 다음 메시지가 표시됩니다.
su: must be run from a terminal
내 프로그램에서 이 동작을 시뮬레이션하고 싶고 프로그램이 터미널에서 실행되고 있는지 감지하는 방법을 알고 싶습니다.
답변1
쉘 스크립트에서:
if [ -t 0 ]; then
echo stdin is a terminal
fi
perl
스크립트 에서 :
print "stdin is a terminal\n" if -t;
C에서:
if (isatty(0)) puts("stdin is a terminal");
모두 동일한 작업을 수행하고 tty 관련 작업을 수행하며 ENOTTY 오류로 실패 ioctl
하지 않는 한 true를 반환합니다 . ioctl
내 시스템에서는 ioctl
TCGETS가 있는데, 이는 명백하기 때문에 상당히 일반적이라고 생각합니다.
$ : | strace -e ioctl su
ioctl(0, TCGETS, 0x7ffff32dfc50) = -1 ENOTTY (Inappropriate ioctl for device)
su: must be run from a terminal