一尘不染

Bash脚本:使用bash脚本中的“ script”命令来记录会话

linux

我正在尝试使用script命令记录bash会话。

script命令是从bash脚本开始执行的,但是一旦执行,bash脚本就会终止。

我尝试使用各种组合来始终以相同的结果调用命令(调用该命令后立即终止bash脚本)。我得到的输出如下:

Script started, file is typescript
root@ubuntu: ...

我也尝试过最后用a来调用命令,&但是再次失败了。

谁能告诉我如何从bash脚本调用命令?

谢谢


阅读 297

收藏
2020-06-03

共1个答案

一尘不染

您的Shell脚本没有终止。它仍在运行。您会收到提示,因为script正在生成新的shell。

用例为script

  1. 开始script(产生一个新的shell)
  2. 做命令
  3. 退出外壳程序(注销)并移至上一个外壳程序
  4. 检查或打印由创建的日志文件 script

因此基本上script可以按预期工作。您将必须找到另一种方式来实现您想要的。

您可以像这样记录脚本的执行:

#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO

说明:

  • exec > logfile 2>&1 将stdout和stderr重定向到日志文件
  • set -x 使bash在执行命令之前先打印所有命令

例:

$ ./foo.sh
$ cat logfile 
+ FOO=BAR
+ echo BAR
BAR

此方法的缺点是该脚本不打印任何输出供人类查看。一切都进入日志文件。

另外,您也可以这样:

#! /bin/bash
# nothing special here
FOO=BAR
echo $FOO

然后像这样执行:

$ script -c "bash -x foo.sh"
Script started, file is typescript
+ FOO=BAR
+ echo BAR
BAR
Script done, file is typescript
$ cat typescript 
Script started on Mi 18 Mai 2011 01:05:29 CEST
+ FOO=BAR
+ echo BAR
BAR

Script done on Mi 18 Mai 2011 01:05:29 CEST
2020-06-03