如何使用 fish 在终端上记录工作历史记录或日志,包括命令和输出?
How can I record work history or log including command and output on terminal with fish?
我正在尝试编辑 /.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
文件以记录包括输出在内的终端日志?
首先,您尝试在文件名中加入时间戳是错误的。应该是now=(date +%Y%m%d%H%M%S)
。同样,在它前面加上 env
命令意味着它对后续语句不可见,因为 env
导致 var 仅对 env
命令的一部分的任何命令可见.你写的相当于
env now=something
path=...
script $path
第一个 env
将简单地将 now
添加到环境变量,然后显示环境变量列表。
其次,您应该确保仅针对交互式 shells 执行此操作:
if status is-interactive
now=(...)
set path /Users/...$now.txt
script $path
end
第三,你需要避免无限递归。如果您不这样做,那么由 script
命令启动的 shell 将启动另一个 script
的会话。有很多方法可以做到这一点,但最简单的是环境变量:
if test -z "$SCRIPTED"
set -gx SCRIPTED nested
now=(...)
path=/Users/...$now.txt
script $path
end
第四,一旦你确定它工作可靠,你可能想做 exec script $path
。否则,当您退出捕获的会话时,您将返回到非捕获的 shell 并且您可能不会注意到转换。或者,在 script
命令后添加类似 echo WARNING: your session is no longer being captured
的内容,以帮助使其真正明显。
我正在尝试编辑 /.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
文件以记录包括输出在内的终端日志?
首先,您尝试在文件名中加入时间戳是错误的。应该是now=(date +%Y%m%d%H%M%S)
。同样,在它前面加上 env
命令意味着它对后续语句不可见,因为 env
导致 var 仅对 env
命令的一部分的任何命令可见.你写的相当于
env now=something
path=...
script $path
第一个 env
将简单地将 now
添加到环境变量,然后显示环境变量列表。
其次,您应该确保仅针对交互式 shells 执行此操作:
if status is-interactive
now=(...)
set path /Users/...$now.txt
script $path
end
第三,你需要避免无限递归。如果您不这样做,那么由 script
命令启动的 shell 将启动另一个 script
的会话。有很多方法可以做到这一点,但最简单的是环境变量:
if test -z "$SCRIPTED"
set -gx SCRIPTED nested
now=(...)
path=/Users/...$now.txt
script $path
end
第四,一旦你确定它工作可靠,你可能想做 exec script $path
。否则,当您退出捕获的会话时,您将返回到非捕获的 shell 并且您可能不会注意到转换。或者,在 script
命令后添加类似 echo WARNING: your session is no longer being captured
的内容,以帮助使其真正明显。