shell脚本中的Linux脚本捕获终端

时间:2013-09-30 06:32:59

标签: linux shell terminal record

我在linux中编写了一个名为script.sh的shell脚本。它假设在执行时调用“script -a record.txt”命令并在名为record.txt的文件中创建终端捕获

#!/bin/bash

script -a record.txt

mkdir folder

当我运行这个script.sh文件时,我得到了创建的record.txt文件,但内容中没有记录“mkdir文件夹”。 “mkdir文件夹”命令被忽略,因此不允许我创建一个新目录。有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

TLDR:脚本命令根据$ SHELL的值分叉并创建子shell,并记录此会话中的文本。

在完成Ctrl + D的script.sh文件运行后,您需要执行exitscript

来自script手册页(http://man7.org/linux/man-pages/man1/script.1.html

  

脚本会在终端上打印所有内容的打字稿。

     

当分叉的shell退出时,脚本结束(control-D退出Bourne shell(sh(1)),退出,注销或control-d(如果不是,则忽略)        set)用于C-shell,csh(1))。

因此,如果你这样做

#!/bin/bash
script -a record.txt
mkdir folder
ls

然后mkdir命令没有被执行,因为你现在处于一个单独的分叉子shell中。使用ctrl + Dexit退出后,mkdir将自动运行,并创建所需的文件夹。

但是,ls命令的输出或mkdirls命令的发出将不会记录在record.txt文件中,因为ls正在原始文件中执行shell,而不是脚本创建的子shell。

答案 1 :(得分:0)

我明白了

#!/bin/bash
function one {

mkdir folder
}

one | tee record.txt