我只是好奇想知道使用终端命令记录script filename
和手动从终端复制有什么区别。请告诉我是否存在一点区别。我知道的是使用脚本命令会给文件带来不必要的击键。
答案1
该script
命令会创建一个脚本,其中包含您当前会话与终端的所有交互。它基本上是创建一个实时屏幕转储并将内容粘贴到文件中。
它包括终端中可见的所有输入和输出。
该history
命令为您提供了第一次使用终端时输入的所有命令。
它仅显示当前会话或所有会话的输入。
答案2
是有区别的,但并不是你想象的那样。
终端可以支持 ASCII 字符 - 0 到 127。这包括西方拉丁字母,包括一些重音符号(如重音符号 `)和标点符号(如 { 和 ~)。
因此,当您从终端仿真器复制粘贴时,您是在将 ASCII 字符复制到 UTF-8 文件中(最有可能)。当然,UTF-8 和 ASCII 是兼容的。UTF-8 中的字符 0 到 127 与 ASCII 相同。
当你输出到文件时,默认情况下它将是 ASCII,但这是可以改变的。
那么,如果编码不太好,为什么有人会使用重定向到文件呢?自动化或不兼容。
您正在使用的终端(可能是 Gnome Terminal 或 X-Term)是一个终端仿真器 - 图形窗口内的终端。
但是有些终端并非如此 - 它们完全是非图形化的,仅有 CLI - 比如 TTY 终端,通过Ctrl++访问Alt,FX其中X
是从 1 到 6 的数字。例如要访问 TTY2,请使用Ctrl++ 。AltF2
这些终端没有鼠标 - 所以您无法复制输出,甚至无法滚动它。
如果您正在运行具有大量输出的命令,您可以将其输出到文件并使用nano
或vi
查看它,或者您可以使用less
命令,因此允许箭头键滚动。
如果我有一个代码来监控我糟糕的互联网速度,以便我可以获得互联网费用折扣,我可能希望自动将速度保存到文件中 - 例如将输出重定向wget
到文件。
这是主要用例——计算机可以在没有任何人工输入的情况下完成此操作,也不需要 GUI。在这些情况下,缺少字符,如
答案3
简而言之,script
命令不仅仅捕获文本,而且捕获的层次也不同。
例如ls
命令。为了生成彩色输出,ls 会向每个条目添加特殊字符(点击此处了解更多信息ls
)。如果您在捕获输出时调用script
,这些特殊字符将被捕获。它还将捕获您可能用键盘按下的转义字符。
script
还能捕获那个不可见的、较低的系统层面上的一切。
通过手动选择文本并复制,您在做什么?在 X 图形服务器中选择文本,对吗?那么文本从哪里来,又到哪里去?它已经渲染、已经后期处理、着色,因此不一定包含特殊字符。它还会进入剪贴板(顺便说一下,这是 X 服务器系统中的 3 个剪贴板之一),然后当您粘贴时,它会从剪贴板中释放出来。
script
非常适合于您想要录制较长的会话并将其传递给某人的情况。当您只运行默认命令时,特殊字符没有问题,彩色命令则没有问题(默认情况下 ls 的别名为ls --color=auto
)。因此,您可以使用反斜杠转义别名\ls
,也可以使用这来自 stackoverflow 网站的解决方案。
至于复制粘贴方法,它适合于简短的输出,你只想传递并忘记它
新增内容
history
我还注意到您对vs更感兴趣,script
因为它可以记录您在终端中输入的命令列表。它们之间的区别在于,历史记录仅保留您告诉终端运行的内容的记录。script
就像记录您的终端一样,所有内容都会被捕获。
它们存储数据的方式也不同。对于 bash 来说,.bash_history
它是文本,而其他 shell 可能会选择数据文件。例如,这是我的mksh
历史文件的比较, vs .bash_history
, vstypescript
xieerqi@eagle:~$ file MKSHHISTFILE
MKSHHISTFILE: data
xieerqi@eagle:~$ file .bash_history
.bash_history: UTF-8 Unicode text
xieerqi@eagle:~$ file typescript
typescript: ASCII text, with CRLF, LF line terminators
使用 时history
,不同 shell 有所差异。bash
默认情况下,将所有内容保存在 中.bash_history
,而对于ksh
或mksh
和 等shell dash
,历史文件必须由用户设置。 script
默认情况下,将所有内容存储在typescript
文件中,但用户也可以指定另一个文件。
最后,历史记录是 shell 的内置功能之一,它将始终存在,但可能需要或不需要配置。script
是一个实用程序,它可能存在或不存在,但不需要配置。