-1

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

#!/bin/bash

script -a record.txt

mkdir folder

当我运行这个 script.sh 文件时,我创建了 record.txt 文件,但内容“mkdir 文件夹”没有记录在那里。“mkdir 文件夹”命令被忽略,因此没有让我创建新目录。有人知道怎么修这个东西吗?

4

2 回答 2

1

TLDR:脚本命令根据 $SHELL 的值分叉并创建一个子 shell,并记录来自该会话的文本。

您需要执行Ctrl + D, 或exit在您完成运行 script.sh 文件script后退出

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

script 为您终端上打印的所有内容制作打字稿。

当分叉的 shell 退出时脚本结束(一个 control-D 退出 Bourne shell (sh(1)),并退出、注销或 control-d(如果未设置 ignoreeof)对于 C-shell、csh(1) )。

因此,如果你这样做

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

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

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

于 2013-09-30T09:56:39.040 回答
0

我知道了

#!/bin/bash
function one {

mkdir folder
}

one | tee record.txt
于 2013-09-30T13:06:42.053 回答