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

lim*_*imp 22 linux bash

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

script命令是通过使用bash脚本执行的,但只要执行该命令,bash脚本就会终止.

我试图使用各种组合来调用命令,但总是使用相同的结果(一旦调用命令就终止bash脚本).我得到的输出如下:

Script started, file is typescript
root@ubuntu: ...
Run Code Online (Sandbox Code Playgroud)

我也尝试用最后调用命令,&但没有运气.

任何人都可以告诉我应该如何从bash脚本调用命令?

谢谢

les*_*ana 22

您的shell脚本没有终止.它仍然在运行.您正在获得提示,因为它script正在生成一个新的shell.

用例script是:

  1. 开始script(生成一个新的shell)
  2. 做命令
  3. 退出shell(注销)并放到上一个shell
  4. 检查或打印由.创建的日志文件 script

所以基本上script按预期工作.你必须找到另一种方法来实现你想要的.

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

#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO
Run Code Online (Sandbox Code Playgroud)

说明:

  • exec > logfile 2>&1 将stdout和stderr重定向到logfile
  • set -x 在执行之前使bash打印每个命令

例:

$ ./foo.sh
$ cat logfile 
+ FOO=BAR
+ echo BAR
BAR
Run Code Online (Sandbox Code Playgroud)

这种方法的缺点是脚本没有输出供人看的输出.一切都进入日志文件.

或者你可以这样做:

#! /bin/bash
# nothing special here
FOO=BAR
echo $FOO
Run Code Online (Sandbox Code Playgroud)

然后像这样执行:

$ 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
Run Code Online (Sandbox Code Playgroud)


Rob*_*een 5

您的bash脚本仍在运行,但它已经生成了一个新的交互式shell.bash脚本正在等待script完成,这只会在交互式shell终止时(通过被杀或用户输入exit)发生.

要在script记录之后创建命令script,请执行以下操作:

script build_log -c 'echo -e "* This line should appear inside the /"build_log/" log file..."'
Run Code Online (Sandbox Code Playgroud)

但是,script在运行该命令后将停止运行.

要在其中运行多个命令script,请将这些命令放在另一个bash脚本中,并将该bash脚本指定为运行该-c选项的命令.