我在linux中编写了一个名为script.sh的shell脚本。它假设在执行时调用“script -a record.txt”命令并在名为record.txt的文件中创建终端捕获
#!/bin/bash
script -a record.txt
mkdir folder
当我运行这个script.sh文件时,我得到了创建的record.txt文件,但内容中没有记录“mkdir文件夹”。 “mkdir文件夹”命令被忽略,因此不允许我创建一个新目录。有谁知道如何解决这个问题?
答案 0 :(得分:1)
TLDR:脚本命令根据$ SHELL的值分叉并创建子shell,并记录此会话中的文本。
在完成Ctrl + D
的script.sh文件运行后,您需要执行exit
或script
来自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 + D
或exit
退出后,mkdir
将自动运行,并创建所需的文件夹。
但是,ls
命令的输出或mkdir
和ls
命令的发出将不会记录在record.txt文件中,因为ls正在原始文件中执行shell,而不是脚本创建的子shell。
答案 1 :(得分:0)
我明白了
#!/bin/bash
function one {
mkdir folder
}
one | tee record.txt