linux - Bash 脚本 : Using "script" command from a bash script for logging a session

标签 linux bash

我正在尝试使用 script 命令来记录 bash session 。

script 命令是通过 bash 脚本执行的,但一旦执行,bash 脚本就会终止。

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

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

我也曾尝试在最后使用 & 调用该命令,但再次失败。

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

谢谢

最佳答案

您的 shell 脚本没有终止。它仍在运行。您收到提示是因为 script 正在生成一个新的 shell。您看到的提示是来自生成的 shell 的提示。

script 的正常用例是这样的:

  1. 启动脚本。这会产生一个新的外壳。
  2. 在新的 shell 中执行命令。
  3. 退出 shell 并回到上一个 shell
  4. 检查由 script 创建的日志文件

所以基本上 script 正在按预期工作。您将不得不找到另一种方法来实现您想要的。

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

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

解释:

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

例子:

$ ./foo.sh
  # (no output here because everything goes to logfile)
$ 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

现在输出直接可见并保存到日志文件(日志文件的默认名称是 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

关于linux - Bash 脚本 : Using "script" command from a bash script for logging a session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5985060/

相关文章:

bash - 替换字符串中的子字符串

bash - 使用sed替换文件中任何给定行中的字符串

linux - 如何使用 Bash 脚本计算用户 (%us) 的 CPU 使用率

python - 来自听众的循环中断

linux - 在 Linux 上弹出 USB 设备

linux - 安装 postgresql92-server postgresql92-contrib 时缺少 libssl.so.10

linux - bash 文件 Linux Ubuntu

java - 如何在linux上升级Tomcat

linux - 使脚本仅在另一个实例未运行时运行

bash - 获取字符串的一部分然后更新它