Как я могу записать историю работы или журнал, включая команду и вывод на терминал с рыбой? - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь отредактировать /.config/fish/config.fish и добавить скрипт вроде этого env now= date +%Y%m%d%H%M%S ;set path /Users/t/logs/script_{$now}.txt ;script {$path}.Но это не работает.

Как мне отредактировать файл config.fish для записи журнала терминала, включая вывод?

1 Ответ

0 голосов
/ 30 мая 2018

Во-первых, ваша попытка включить метку времени в имя файла неверна.Это должно быть now=(date +%Y%m%d%H%M%S).Кроме того, добавление префикса к команде env означает, что она не будет видна последующим операторам, поскольку env заставляет var быть видимым только для любой команды, являющейся частью команды env.То, что вы написали, эквивалентно

env now=something
path=...
script $path

То, что сначала env просто добавит now в env vars, а затем отобразит список env vars.

Во-вторых, вы должны убедиться, чтоэто делается только для интерактивных оболочек:

if status is-interactive
    now=(...)
    set path /Users/...$now.txt
    script $path
end

В-третьих, вам нужно избегать бесконечной рекурсии.Если вы этого не сделаете, то оболочка, запущенная командой script, запустит другой сеанс script 'ed.Есть много способов сделать это, но самый простой - env ​​var:

if test -z "$SCRIPTED"
    set -gx SCRIPTED nested
    now=(...)
    path=/Users/...$now.txt
    script $path
end

В-четвертых, вы можете захотеть сделать exec script $path, если вы уверены, что это работает надежно.В противном случае, когда вы выйдете из захваченного сеанса, вы вернетесь в не захватывающую оболочку и можете не заметить переход.В качестве альтернативы добавьте что-то вроде echo WARNING: your session is no longer being captured после команды script, чтобы сделать это действительно очевидным.

...