脚本命令和从终端手动复制到外部文件之间的区别?

脚本命令和从终端手动复制到外部文件之间的区别?

我只是好奇想知道使用终端命令记录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++访问AltFX其中X是从 1 到 6 的数字。例如要访问 TTY2,请使用Ctrl++ 。AltF2

这些终端没有鼠标 - 所以您无法复制输出,甚至无法滚动它。

如果您正在运行具有大量输出的命令,您可以将其输出到文件并使用nanovi查看它,或者您可以使用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,而对于kshmksh和 等shell dash,历史文件必须由用户设置。 script默认情况下,将所有内容存储在typescript文件中,但用户也可以指定另一个文件。

最后,历史记录是 shell 的内置功能之一,它将始终存在,但可能需要或不需要配置。script是一个实用程序,它可能存在或不存在,但不需要配置。

相关内容