我正在尝试使用 script
命令来记录 bash session 。
script
命令是通过 bash 脚本执行的,但一旦执行,bash 脚本就会终止。
我尝试使用各种组合调用命令,结果始终相同(调用命令后立即终止 bash 脚本)。我得到的输出如下:
Script started, file is typescript
root@ubuntu: ...
我也曾尝试在最后使用 &
调用该命令,但再次失败。
谁能告诉我应该如何从 bash 脚本调用命令?
谢谢
最佳答案
您的 shell 脚本没有终止。它仍在运行。您收到提示是因为 script
正在生成一个新的 shell。您看到的提示是来自生成的 shell 的提示。
script
的正常用例是这样的:
- 启动
脚本
。这会产生一个新的外壳。 - 在新的 shell 中执行命令。
- 退出 shell 并回到上一个 shell
- 检查由
script
创建的日志文件
所以基本上 script
正在按预期工作。您将不得不找到另一种方法来实现您想要的。
您可以像这样记录脚本的执行:
#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO
解释:
exec > logfile 2>&1
将 stdout 和 stderr 重定向到 logfileset -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/