-
Dari
man tty
tty – cetak nama file terminal yang terhubung ke input standar
$ tty /dev/pts/2
-
Dari APUE:
Secara historis, nama terminal pengontrol di sebagian besar versi Sistem UNIX adalah
/dev/tty
. POSIX.1 menyediakan fungsi
runtime
yang dapat kita panggil untuk menentukan nama terminal
pengontrol.#include <stdio.h> char *ctermid(char *ptr);
$ ls -la /dev/tty crw-rw-rw- 1 root tty 5, 0 May 26 00:16 /dev/tty
Jadi saya bertanya-tanya apakah output dari perintah tty
dan file /dev/tty
keduanya merujuk ke terminal pengontrol dari proses bash saat ini?
Jika ya, mengapa perintah tty
keluaran file budak pseudoterminal /dev/pts/2
, yang berbeda dari /dev/tty
?
Karena emulator terminal lxterminal
dan bash shell yang berjalan di dalamnya menggunakan pasangan pseudoterminal, bukan budak pseudoterminal /dev/pts/2
terminal pengendali bash shell?
/dev/tty
dan /dev/pts/2
bukan symlink satu sama lain, jadi apakah itu file yang berbeda?
Terima kasih.
Postingan lanjutan apa hubungan antara terminal pengontrol saya saat ini dan `/dev/tty`?
Jawaban yang Diterima:
Perintah tty
(1) mengembalikan nama terminal yang terhubung ke input standar. Ini mungkin terminal pengontrol atau mungkin tidak. Proses tersebut bahkan mungkin memiliki terminal pengontrol tetapi tidak tertulis bahwa terminal tersebut harus terhubung ke input standar.
Dari halaman manual POSIX untuk tty
(1):
Utilitas tty akan menulis ke keluaran standar nama terminal yang terbuka sebagai masukan standar. Nama yang digunakan harus sama dengan string yang akan dikembalikan oleh
ttyname()
fungsi yang didefinisikan dalam volume Antarmuka Sistem POSIX.1-2008.
Cobalah sendiri; lari
< /dev/null sh -c 'tty; sleep 10; echo "Done."'
dan tekan Ctrl+C setelah melihat pesan “not a tty” yang ditulis oleh tty
karena input standarnya bukan terminal (pseudo-).
Sebaliknya, /dev/tty
selalu merupakan sinonim untuk terminal pengontrol suatu proses, asalkan proses tersebut sebenarnya memiliki terminal pengontrol.