Scroll to navigation

SCRIPT(1) Polecenia użytkownika SCRIPT(1)

NAZWA

script - tworzy maszynopis sesji

SKŁADNIA

script [opcje] [plik]

OPIS

script tworzy maszynopis wszystkiego, co zostało wypisane w danej sesji terminala. Dane terminala są zachowywane w surowej postaci w pliku dziennika, a informacje związane z czasem są zapisywane do innego (opcjonalnego) ustrukturyzowanego pliku dziennika synchronizacji. Plik dziennika synchronizacji jest wymagany, aby później odtworzyć sesję za pomocą programu scriptreplay(1) i do zachowania dodatkowych informacji o sesji.

Od wersji 2.35, script obsługuje wiele strumieni i pozwala na zapisywanie wejścia i wyjścia do oddzielnych plików lub do wspólnego pliku. Wersja ta obsługuje również nowy plik synchronizacji, który zapisuje dodatkowe informacje. Polecenie scriptreplay --summary udostępni wówczas pełne informacje.

Jeżeli poda się argument plik lub opcję --log-out, script zapisuje cały dialog w pliku. Jeżeli nie poda się nazwy pliku, maszynopis jest zapisywany w pliku typescript.

Proszę zauważyć, że zapisanie wejścia za pomocą --log-in lub --log-io może zachować wrażliwe informacje związane z zabezpieczeniami, ponieważ plik dziennika zawiera pełne wejście sesji terminala (np. hasła), niezależnie od ustawienia ukrywania wyświetlania znaków na terminalu.

OPCJE

Poniżej, po argumencie rozmiar mogą wystąpić przyrostki oznaczające wielokrotność KiB (=1024), MiB (=1024*1024) itd. dla GiB, TiB, PiB, EiB, ZiB i YiB (cząstka "iB" jest opcjonalna, np. "K" ma to samo znaczenie co "KiB") albo przyrostki KB (=1000), MB (=1000*1000) itd. dla GB, TB, PB, EB, ZB i YB.

-a, --append

Dołącza wyjście do podanego pliku albo pliku typescript, zachowując uprzednią zawartość.

-c, --command polecenie

Uruchamia polecenie zamiast powłoki interaktywnej. Dzięki temu można łatwiej przechwycić wyjście programu zachowującego się inaczej, gdy jego standardowym wyjściem nie jest terminal.

-E, --echo kiedy

Opcja steruje flagą ECHO dla końcówki podrzędnej pseudoterminala sesji. Obsługiwanymi trybami są: always, never lub auto.

Domyślne jest auto — w takim przypadku ECHO dla podrzędnego pseudoterminala jest włączone; jeśli bieżącym standardowym wejściem jest terminal, ECHO jest wyłączone, aby uniknąć podwójnego odbijania; jeśli bieżącym standardowym wejściem nie jest terminal (lecz np. potok: echo date | script) to utrzymanie włączonego ECHO dla podrzędnego pseudoterminala umożliwia oglądanie danych wejściowych na ekranie, przy jednoczesnym ich zapisywaniu do dziennika sesji.

Proszę zauważyć, że tryb "never" wpływa na zawartość dziennika wyjściowego sesji, ponieważ wejście wprowadzone przez użytkowników nie jest odbijane na wyjściu.

-e, --return

Zwraca status zakończenia procesu potomnego. Używa tego samego formatu jak kod zakończenia basha przy przerwaniu sygnałem (tj. status zakończenia wynosi 128 + numer sygnału). Status zakończenia procesu potomnego jest również zawsze zachowywany w pliku maszynopisu.

-f, --flush

Opróżnia wyjście po każdym zapisie. Jest to użyteczne w przypadku współpracy kilku osób: pierwsza wykonuje mkfifo foo; script -f foo, a druga w czasie rzeczywistym nadzoruje jej poczynania, używając cat foo. Proszę zauważyć, że opróżnianie może mieć wpływ na wydajność; można skorzystać z sygnału SIGUSR1, aby opróżniać dzienniki na żądanie.

--force

Zezwala, aby domyślny plik wyjściowy typescript był dowiązaniem zwykłym (twardym) lub symbolicznym. Polecenie podąży za dowiązaniem symbolicznym.

-B, --log-io plik

Zapisuje wejście i wyjście do tego samego pliku. Proszę zauważyć, że opcja ta ma sens tylko w połączeniu z --log-timing, w innym przypadku nie da się oddzielić strumienia wejściowego i wyjściowego w dzienniku plik.

-I, --log-in plik

Zapisuje wejście do pliku. Zapisywanie wyjścia będzie wyłączone, jeśli podano tylko opcję --log-in.

Należy korzystać z tej opcji z dużą dozą ostrożności, ponieważ zapisuje pełne wejście, włącznie z wejściem, które nie jest odbijane na terminalu (np. wprowadzane hasła).

-O, --log-out plik

Zapisuje wyjście do pliku. Domyślnie, jeśli nie podano opcji --log-out lub --log-in, wyjście jest zapisywane do pliku o nazwie typescript. Zapisywanie wyjścia będzie wyłączone, jeśli podano tylko opcję --log-in.

-T, --log-timing plik

Zapisuje dziennik synchronizacji do pliku. Obecnie, obsługiwane są dwa formaty pliku synchronizacji. Format klasyczny używany jest, gdy włączone jest zapisywanie tylko jednego strumienia (wejścia lub wyjścia). Format wielostrumieniowy używany jest, gdy podano opcję --log-io albo podano opcje --log-in i --log-out jednocześnie. Zob. też --logging-format.

-m, --logging-format format

Wymusza użycie formatu advanced (zaawansowanego) lub classic (klasycznego) dziennika synchronizacji. Domyślny jest format klasyczny, gdy zapisywane jest tylko wyjście i format zaawansowany, gdy zażądano zapisywania wejścia i wyjścia.

Format klasyczny

Dziennik synchronizacji zawiera dwa pola, rozdzielone spacją. Pierwsze pole zawiera informację, jak dużo czasu upłynęło od poprzedniego wyjścia. Drugie pole określa, ile znaków zostało wypisanych tym razem.

Format zaawansowany (wielostrumieniowy)

Pierwsze pole zawiera identyfikator typu wpisu ('I’nput (wejście), 'O’utput (wyjście), 'H’eader (nagłówek), 'S’ygnał). Drugie pole zawiera informację, jak dużo czasu upłynęło od poprzedniego wpisu, a reszta wpisu zawiera dane zależne od typu wpisu.

-o, --output-limit rozmiar

Ogranicza rozmiar pliku maszynopisu i synchronizacji do rozmiaru i zatrzymuje proces potomny, po przekroczeniu tej wartości. Obliczony rozmiar pliku nie obejmuje początkowego i końcowego komunikatu, dołączanego przez polecenie script przed i za wyjściem procesu potomnego. Ze względu na buforowanie, wynikowy plik wyjściowy może być większy niż podana wartość.

-q, --quiet

Tryb cichy (bez wypisywania komunikatu początkowego i końcowego na standardowe wyjście).

-t[plik], --timing[=plik]

Wypisuje dane synchronizacji na standardowe wyjście błędów lub do pliku, jeśli go podano. Opcja przestarzała na rzecz --log-timing, gdzie argument plik nie jest opcjonalny.

-h, --help

Wyświetla ten tekst i wychodzi.

-V, --version

Wyświetla wersję i wychodzi.

SYGNAŁY

Po otrzymaniu SIGUSR1, script natychmiast opróżnia pliki wyjściowe.

ŚRODOWISKO

Następująca zmienna środowiskowa jest wykorzystywana przez script:

SHELL

Jeżeli zmienna SHELL istnieje, powłoka rozwidlona przez script będzie tą powłoką. Jeżeli SHELL nie jest ustawiona, wówczas przybierana jest powłoka Bourne (większość powłok ustawia tę zmienną automatycznie).

UWAGI

Skrypt kończy się, gdy wyjdzie się z rozwidlonej powłoki. W powłoce Bourne’a (sh(1p)) za pomocą control-D, albo w przypadku powłoki C csh(1) korzystając z exit, logout lub control-d (jeżeli ignoreeof nie jest ustawiona).

Pewne interakcyjne komendy, takie jak vi(1), tworzą śmieci w pliku maszynopisu. script działa najlepiej z komendami, które nie manipulują ekranem, rezultaty mają naśladować wydruk terminala.

Nie zaleca się uruchamiać script w powłokach nieinteraktywnych. Wewnętrzna powłoka script jest zawsze interaktywna, co może dać niespodziewane wyniki. Jeśli korzysta się z programu script w swoim pliku inicjalizacji powłoki, konieczne jest unikanie wejścia w nieskończoną pętlę. Można to zrobić np. w pliku .profile, który jest odczytywany tylko przez powłokę zgłoszeniową (logowania):

if test -t 0 ; then

script
exit fi

Proszę unikać również korzystania z script w potokach, ponieważ script może odczytać więcej wejścia, niż się tego można było spodziewać.

HISTORIA

Polecenie script pojawiło się w 3.0BSD.

USTERKI

script umieszcza w pliku dziennika wszystko, wliczając znaki wysuwu wiersza i znaki cofania się (backspace). Nie jest to coś, czego mógłby się spodziewać niedoświadczony użytkownik.

script zaprojektowano głównie do interaktywnych sesji terminala. Gdy standardowe wejście nie jest terminalem (przykład: echo foo | script), to sesja może się zawiesić, ponieważ powłoka interaktywna wewnątrz sesji script nie otrzyma EOF (znaku końca pliku) i script nie będzie miał pojęcia, kiedy należy ją zamknąć. Więcej informacji w rozdziale UWAGI.

ZOBACZ TAKŻE

csh(1) (mechanizm history), scriptreplay(1), scriptlive(1)

ZGŁASZANIE BŁĘDÓW

Problemy należy zgłaszać w systemie śledzenia błędów <https://github.com/util-linux/util-linux/issues>.

DOSTĘPNOŚĆ

Polecenie script jest częścią pakietu util-linux, który można pobrać ze strony Archiwum jądra Linux <https://www.kernel.org/pub/linux/utils/util-linux/>.

2025-03-19 util-linux 2.41